私は以下の問題に遭遇しました:JTextPaneのカレットの位置が正しくありませんか。バグや予想される行動?
コンポーネントのキャレットの位置にあるJTextComponentのドキュメントの文字を読みたいと思います。私がJTextPaneを使用しているとき、キャレットの位置に戻された文字は正しいものではありません。より詳細には、返される文字は、キャレットの位置から行の番号を引いた位置です。 (キャレット位置 - 現在の行の数)。一方、私はJTextAreaを使用すると正しい結果になります...これを実証するために、私はあなたが演奏できるサンプルプログラムを実装しました。
JTextPaneの場合、キャレットの位置の文字をどうやって取得できますか?
JTextPaneがJTextAreaと同じキャレット位置を返しない理由、さらにJTextPaneによって返された文字が画面に表示されている文字と異なる理由は何ですか? 説明されている動作はバグですか?あなた以下
は、JTextPaneのを使用して非常に興味深く、予想外の結果
のサンプルプログラムのコードだけでなく、スクリーンショットを見つけることができます。 CARETポジション17の文字はeです。いや...
alt text http://img405.imageshack.us/img405/2746/jtextpane.jpg
Usign JTextAreaに。ここで私は前と同じ位置にキャレットを持っていますが、今はキャレット位置20を得て、戻り文字は\ r \ nです(期待通りです)。
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.event.*;
public class Example extends JFrame {
// use this instead of JTextPane to see the difference
// JTextComponent testingArea = new JTextArea(5,10);
JTextComponent testingArea = new JTextPane();
JButton button = new JButton("test");
JTextComponent resultArea = new JTextField(20);
public Example() {
initialise();
testingArea.setText("line1\r\nline2\r\nline3\r\nline4");
}
private void initialise() {
testingArea.setPreferredSize(new Dimension(100,100));
setLayout(new FlowLayout());
getContentPane().add(testingArea);
getContentPane().add(new JLabel("answer"));
getContentPane().add(resultArea);
getContentPane().add(button);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
int caretPosition = testingArea.getCaretPosition();
char result = testingArea.getText().charAt(caretPosition);
resultArea.setText("Char at caretPosition " + caretPosition + " is " + result);
}catch (Exception e2) {
e2.printStackTrace();
resultArea.setText("ERROR");
}
}
});
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
final Example ex = new Example();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
ex.pack();
ex.setVisible(true);
}
});
}
}
感謝を助けのため:
ここ alt text http://img809.imageshack.us/img809/5323/jtextarea.jpgは、あなたがこの奇妙な動作を確認すると遊ぶことができるコードです!中のに対し、私はJTextPaneのEOLで考える私は、Java 6
貴重な回答をいただきありがとうございます(alain.janinm、StanislavL)。 – Pitelk