2

JTextPanel テキストのどの部分が選択されているかを調べたい。JTextPane.getSelectionStart()andを呼び出そうとしましJTextPane.getSelectionEnd()たが、常に現在のキャレット位置と同じ値を返します。それに関する私の問題は何ですか?

現在の選択を取得するコードの例に感謝します。

4

3 に答える 3

7

をご覧くださいJTextComponent#getSelectedText()。のインスタンスでこのメソッドを呼び出すだけでJTextPane、 の選択されたテキストが返されますJTextPane。小さな例を行いました:

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class JavaApplication101 {

    private JTextPane jTextPane;
    private JButton btnGetSelectedText;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new JavaApplication101().createAndShowUI();
            }
        });
    }

    private void createAndShowUI() {

        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        initComponents(frame.getContentPane());
        frame.pack();
        frame.setVisible(true);
    }

    private void initComponents(Container contentPane) {
        jTextPane = new JTextPane();
        btnGetSelectedText = new JButton("Get selected text");

        btnGetSelectedText.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(null, jTextPane.getSelectedText());
            }
        });
        contentPane.add(jTextPane, BorderLayout.NORTH);
        contentPane.add(btnGetSelectedText, BorderLayout.SOUTH);
    }
}
于 2012-09-19T13:42:58.593 に答える
1
public class TextPaneHighlightsDemo extends JFrame {

public TextPaneHighlightsDemo() {
    super("SplashScreen demo");
    setSize(300, 200);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    final JTextPane textPane = new  JTextPane();
    add(textPane);
    textPane.addCaretListener(new CaretListener() {

        @Override
        public void caretUpdate(CaretEvent e) {
            Highlight[] h = textPane.getHighlighter().getHighlights();
            for(int i = 0; i < h.length; i++) {
                System.out.println(h[i].getStartOffset());
                System.out.println(h[i].getEndOffset());
            }

        }
    });
        }

public static void main (String args[]) {
    TextPaneHighlightsDemo test = new TextPaneHighlightsDemo();
    test.setVisible(true);
}
}
于 2012-09-19T10:34:16.587 に答える
0

私の問題を見つけました - それは、イベントFocusListenerを取得する前に JTextPane コンテンツを変更していた (そして選択をドロップしていた)カスタムでした。keyTyped

とにかく、例とコメントをありがとう!

于 2012-09-19T14:15:21.053 に答える