Как легко редактировать стиль выбранного текста в JTextPane?

Как легко редактировать стиль выбранного текста в JTextPane? Не похоже, что на это есть много ресурсов. Даже если вы можете направить меня на хороший ресурс, я был бы очень признателен.

кроме того, как получить текущий стиль выбранного текста? Я пытался!--0--> но, похоже, это не работает.

5 ответов


взгляните на следующий код в этом 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);

Он задает стиль текста между смещение и длина до определенного стиля.

см. полный pastebin для получения более подробной информации. Это должно решить вашу проблему.


вот фрагмент кода для вставки отформатированного " Hello World!- строка в 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);

самый простой способ манипулировать текстовыми панелями - использовать редактор наборов и их действия. Вы можете найти демонстрацию этого в JDK образцы (при jdk\demo\jfc\Stylepad).

пример кода, который устанавливает 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 () и логические фамилии шрифтов.)


Я бы рекомендовал взглянуть на Java Tutorial о панели редактора.


ОК, вау. Трудный вопрос. Поэтому я не нашел способа получить стиль данного персонажа. Однако вы можете получить 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 не работает, потому что она возвращает стиль по умолчанию (или, возможно, только стиль) для абзаца, содержащего p, а не стиль символа в p.