Come faccio facilmente modificare lo stile del testo selezionato in un JTextPane?

StackOverflow https://stackoverflow.com/questions/766396

  •  12-09-2019
  •  | 
  •  

Domanda

Come faccio facilmente modificare lo stile del testo selezionato in un JTextPane? Non sembra essere molte risorse su questo. Anche se mi è possibile indirizzare ad una buona risorsa su questo, sarei molto grato.

Inoltre, come faccio a ottenere lo stile corrente del testo selezionato? Ho provato styledDoc.getLogicalStyle(textPane.getSelectionStart()); ma non sembra funzionare.

È stato utile?

Soluzione

Date un'occhiata al seguente codice in questo pastebin:

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

L'esempio è da qui:

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

Sembra che si può modificare lo stile utilizzando il seguente in un listener di azione:

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

doc.setCharacterAttributes(0, 10, boldStyle, true);

Si imposta lo stile del testo tra la data di offset e la lunghezza per uno stile specifico.

Vedere la piena pastebin per maggiori dettagli. Questo dovrebbe risolvere il problema però.

Altri suggerimenti

Ecco un frammento di codice per inserire un formattato "Ciao Mondo!" stringa in un 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);

Il modo più semplice per manipolare pannelli di testo sta usando Editor kit e la loro associati azioni . È possibile trovare una demo di questo nei JDK campioni (in jdk \ demo \ jfc \ StylePad ).

Il codice di esempio che installa un StyledEditorKit e utilizza un FontSizeAction per manipolare il testo:

  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);
  }

(Suggerimento: se si desidera utilizzare un FontFamilyAction , dare un'occhiata a GraphicsEnvironment.getAvailableFontFamilyNames () e I cognomi carattere logici .)

Mi piacerebbe consiglio di dare un'occhiata a Java Tutorial di Sun su editor di riquadri.

Ok, wow. Domanda difficile. Quindi non ho trovato un modo per ottenere lo stile di un determinato carattere. È possibile, tuttavia, ottenere il MutableAttributeSet per un dato carattere e quindi verificare se lo stile è in quel set di attributi.

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

Un problema con ottenere lo stile per una serie di caratteri è che ci possono essere più di uno stile applicato a tale intervallo (ad esempio: è possibile selezionare il testo in cui alcuni è audace e alcuni non è)

.

Per aggiornare il testo selezionato è possibile:

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

Oh, e sembra che la funzione getLogicalStyle non funziona perché è il ritorno allo stile di default (o forse solo lo stile) per il paragrafo che contiene p, piuttosto che il lo stile del carattere in p.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top