JTextPanel テキストのどの部分が選択されているかを調べたい。JTextPane.getSelectionStart()
andを呼び出そうとしましJTextPane.getSelectionEnd()
たが、常に現在のキャレット位置と同じ値を返します。それに関する私の問題は何ですか?
現在の選択を取得するコードの例に感謝します。
をご覧ください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);
}
}
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);
}
}
私の問題を見つけました - それは、イベントFocusListener
を取得する前に JTextPane コンテンツを変更していた (そして選択をドロップしていた)カスタムでした。keyTyped
とにかく、例とコメントをありがとう!