2009-04-19 24 views
6

मैं JTextPane में चयनित टेक्स्ट की शैली को आसानी से कैसे संपादित करूं? इस पर कई संसाधन प्रतीत नहीं होते हैं। यहां तक ​​कि यदि आप मुझे इस पर एक अच्छे संसाधन के लिए निर्देशित कर सकते हैं, तो भी मैं इसकी सराहना करता हूं।मैं JTextPane में चयनित टेक्स्ट की शैली को आसानी से कैसे संपादित करूं?

इसके अलावा, मैं कैसे चयनित पाठ की वर्तमान शैली मिलता है? मैंने styledDoc.getLogicalStyle(textPane.getSelectionStart()); की कोशिश की लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है।

उत्तर

2

इस pastebin में निम्न कोड पर एक नज़र डालें:

http://pbin.oogly.co.uk/listings/viewlistingdetail/d6fe483a52c52aa951ca15762ed3d3

उदाहरण यहां से है:

http://www.java2s.com/Code/Java/Swing-JFC/JTextPaneStylesExample3.htm

ऐसा लगता है कि आप निम्नलिखित का उपयोग कर शैली को बदल सकते हैं की तरह

final Style boldStyle = sc.addStyle("MainStyle", defaultStyle); 
StyleConstants.setBold(boldStyle, true); 

doc.setCharacterAttributes(0, 10, boldStyle, true); 
: एक कार्रवाई श्रोता में

यह दिए गए ऑफसेट और लंबाई के बीच एक विशिष्ट शैली के बीच पाठ की शैली सेट करता है।

अधिक जानकारी के लिए पूर्ण पेस्टबिन देखें। हालांकि आपकी समस्या को ठीक करना चाहिए।

+0

मैंने अभी जावा के लिंक और वाह का दौरा किया, उदाहरण के बहुत सारे। – extraneon

0

मैं सूर्य की Java Tutorial संपादक शीशे के बारे में पर एक नज़र लेने की सलाह देते हैं।

3

यहाँ एक स्वरूपित डालने के लिए एक कोड का टुकड़ा है "नमस्ते दुनिया!" JEditorPane में स्ट्रिंग:

Document doc = yourEditorPane.getDocument(); 

StyleContext sc = new StyleContext(); 
Style style = sc.addStyle("yourStyle", null); 

Font font = new Font("Arial", Font.BOLD, 18); 

StyleConstants.setForeground(style, Color.RED); 
StyleConstants.setFontFamily(style, font.getFamily()); 
StyleConstants.setBold(style, true); 

doc.insertString(doc.getLength(), "Hello World!", style); 
+0

मुझे नहीं पता कि यह क्यों कम किया गया था क्योंकि यह यहां सबसे सही जवाब है! –

0

ठीक है, वाह। मुश्किल सवाल। तो मुझे किसी दिए गए चरित्र की शैली पाने का कोई तरीका नहीं मिला है। हालांकि, आप किसी दिए गए चरित्र के लिए MutableAttributeSet प्राप्त कर सकते हैं और फिर यह देखने के लिए परीक्षण कर सकते हैं कि शैली उस विशेषता सेट में है या नहीं। वर्णों की एक श्रृंखला के लिए शैली हो रही के साथ

Style s; //your style 
    Element run = styledDocument.getCharacterElement( 
     textPane.getSelectionStart()); 
    MutableAttributeSet curAttr = 
     (MutableAttributeSet)run.getAttributes(); 
    boolean containsIt = curAttr.containsAttributes(s); 

एक समस्या यह एक से अधिक शैली है कि सीमा के लिए लागू हो सकता है (उदाहरण: आप पाठ का चयन कर सकते हैं जहां कुछ बोल्ड है और कुछ नहीं है)।

चयनित पाठ आप कर सकते हैं अद्यतन करने के लिए:

Style s; //your style 
    JTextPane textPane; //your textpane 
    textPane.setCharacterAttributes(s, false); 

ओह, और ऐसा लगता है कि क्योंकि यह डिफ़ॉल्ट शैली (या शायद सिर्फ शैली) पैरा जिसमें के लिए लौटा रहा है समारोह getLogicalStyle काम नहीं करता है पी, चरित्र पर शैली की शैली के बजाय पी।

2

टेक्स्ट पैनलों में हेरफेर करने का सबसे आसान तरीका editor kits और उनके संबंधित actions का उपयोग कर रहा है। आप JDK नमूने (जेडीके \ डेमो \ जेएफसी \ स्टाइलपैड के तहत) में इसका एक डेमो पा सकते हैं।

नमूना कोड है कि एक StyledEditorKit स्थापित करता है और पाठ हेरफेर करने के लिए एक FontSizeAction उपयोग करता है:

public static void main(String[] args) { 
    // create a rich text pane 
    JTextPane textPane = new JTextPane(); 
    JScrollPane scrollPane = new JScrollPane(textPane, 
     JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, 
     JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); 
    // install the editor kit 
    StyledEditorKit editorKit = new StyledEditorKit(); 
    textPane.setEditorKit(editorKit); 
    // build the menu 
    JMenu fontMenu = new JMenu("Font Size"); 
    for (int i = 48; i >= 8; i -= 10) { 
     JMenuItem menuItem = new JMenuItem("" + i); 
     // add an action 
     menuItem 
      .addActionListener(new StyledEditorKit.FontSizeAction(
       "myaction-" + i, i)); 
     fontMenu.add(menuItem); 
    } 
    JMenuBar menuBar = new JMenuBar(); 
    menuBar.add(fontMenu); 
    // show in a frame 
    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(600, 400); 
    frame.setJMenuBar(menuBar); 
    frame.setContentPane(scrollPane); 
    frame.setVisible(true); 
    } 

(युक्ति:। यदि आप एक FontFamilyAction उपयोग करना चाहते हैं, GraphicsEnvironment.getAvailableFontFamilyNames() और logical font family names पर एक नजर है)

+0

अच्छा उदाहरण है, लेकिन मेरे पास एक सवाल है। मैं शैली के साथ पाठ कैसे प्राप्त करता हूं और डेटाबेस में शैली के साथ इस पाठ को कैसे सहेज सकता हूं? – Krismorte

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^