Pergunta

Como edito facilmente o estilo do texto selecionado em um JTextPane?Não parece haver muitos recursos sobre isso.Mesmo que você possa me indicar um bom recurso sobre isso, eu agradeceria muito.

Além disso, como obtenho o estilo atual do texto selecionado?tentei styledDoc.getLogicalStyle(textPane.getSelectionStart()); mas não parece estar funcionando.

Foi útil?

Solução

Dê uma olhada no código a seguir neste Pastebin:

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

O exemplo é daqui:

http://www.java2.com/code/java/swing-jfc/jtextpanestylesexample3.htm

Parece que você pode mudar o estilo usando o seguinte em um ouvinte de ação:

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

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

Ele define o estilo do texto entre o deslocamento fornecido e o comprimento para um estilo específico.

Veja o Pastebin completo para obter mais detalhes. Isso deve corrigir seu problema.

Outras dicas

Aqui está um trecho de código para inserir um formatado "Hello World!" string em a 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);

A maneira mais fácil de manipular painéis de texto é usar kits de editor e o seu associado ações. Você pode encontrar uma demonstração disso no JDK amostras (abaixo JDK Demo jfc stylepad).

Código de exemplo que instala um StyledEdITorkit e usa a Fontsizeation Para manipular o texto:

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

(Dica: se você quiser usar um FontfamilyAction, dê uma olhada em Graphicsenvironment.GetAvailableFontFamilyNames () e nomes de família de fontes lógicos.)

Eu recomendo dar uma olhada no Sun's Java Tutorial sobre painéis do editor.

Ok, uau.Pergunta difícil.Portanto, não encontrei uma maneira de obter o estilo de um determinado personagem.Você pode, no entanto, obter o MutableAttributeSet para um determinado caractere e testar para ver se o estilo está nesse conjunto de atributos.

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

Um problema ao obter o estilo para um intervalo de caracteres é que pode haver mais de um estilo aplicado a esse intervalo (exemplo:você pode selecionar texto onde alguns estão em negrito e outros não).

Para atualizar o texto selecionado você pode:

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

Ah, e parece que a função getLogicalStyle não funciona porque está retornando o estilo padrão (ou talvez apenas o estilo) do parágrafo que contém p, em vez do estilo do caractere em p.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top