6

JTextPane で選択したテキストのスタイルを簡単に編集するにはどうすればよいですか? これに関するリソースはあまりないようです。これに関する優れたリソースを教えていただければ幸いです。

また、選択したテキストの現在のスタイルを取得するにはどうすればよいですか? 試してみstyledDoc.getLogicalStyle(textPane.getSelectionStart());ましたが、うまくいかないようです。

4

5 に答える 5

3

フォーマットされた「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);
于 2009-04-20T01:01:54.407 に答える
2

このペーストビンの次のコードを見てください。

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

指定されたオフセットと長さの間のテキストのスタイルを特定のスタイルに設定します。

詳細については、完全なペーストビンを参照してください。それでも問題は解決するはずです。

于 2009-04-20T01:00:28.293 に答える
2

テキスト パネルを操作する最も簡単な方法は、エディター キットとそれに関連するアクションを使用することです。このデモは、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()および論理フォント ファミリー名を参照してください。)

于 2009-05-02T12:41:51.660 に答える
0

エディターペインに関するSunのJavaチュートリアルを参照することをお勧めします。

于 2009-04-20T00:48:02.927 に答える
0

わかりました、うわー。難しい質問です。そのため、特定のキャラクターのスタイルを取得する方法が見つかりませんでした。ただし、特定の文字の MutableAttributeSet を取得して、スタイルがその属性セットに含まれているかどうかをテストできます。

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

文字範囲のスタイルを取得する際の問題の 1 つは、その範囲に複数のスタイルが適用される可能性があることです (例: 太字と太字でないテキストを選択する場合があります)。

選択したテキストを更新するには、次のことができます。

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

ああ、関数 getLogicalStyle が機能しないようです。これは、p の文字のスタイルではなく、p を含む段落のデフォルト スタイル (または単にスタイル) を返すためです。

于 2009-05-01T04:52:54.323 に答える