Scroll JTextArea在重新设置文本后不滚动到可见
我遇到了一个奇怪的问题。Scroll JTextArea在重新设置文本后不滚动到可见,scroll,replace,jtextarea,Scroll,Replace,Jtextarea,我遇到了一个奇怪的问题。 场景是我需要用另一个单词替换JTextArea中的关键字。 我有两个按钮,一个是查找关键字,另一个是替换关键字。 对于这两个按钮,我都添加了鼠标侦听器并实现函数mouseClicked。在当前阶段,我可以突出显示找到的关键字并滚动到关键字位置。但是当处理替换按钮时,在重新设置文本后,JTextArea总是向下滚动到底部,但是我想保持替换发生的位置,我该怎么办?下面是我的代码片段,但它不起作用 replaceBtn.addMouseListener(new MouseAd
场景是我需要用另一个单词替换
JTextArea
中的关键字。我有两个按钮,一个是查找关键字,另一个是替换关键字。
对于这两个按钮,我都添加了鼠标侦听器并实现函数
mouseClicked
。在当前阶段,我可以突出显示找到的关键字并滚动到关键字位置。但是当处理替换按钮时,在重新设置文本后,JTextArea
总是向下滚动到底部,但是我想保持替换发生的位置,我该怎么办?下面是我的代码片段,但它不起作用
replaceBtn.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
String keyword = jKeyword.getText();
if (keyword.length() == 0)
return;
String text = jTextArea.getText();
pos = text.indexOf(keyword, 0);
if (pos == -1) {
pos = 0;
JOptionPane.showMessageDialog(null, "can not find " + keyword);
return;
}
jTextArea.setText(text.replaceFirst(keyword, jReplaceKW.getText()));
//jTextArea.revalidate();
//scroll to first keyword occurrence
try {
Rectangle rectangle = jTextArea.modelToView(pos);
jTextArea.scrollRectToVisible(rectangle);
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
});
我找到了一个解决方法:在函数
鼠标按下时设置文本,然后在函数鼠标按下时滚动
我怀疑在组件能够计算出滚动尺寸之前,必须在GUI中表示文本?不确定
replaceBtn.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
String keyword = jKeyword.getText();
if (keyword.length() == 0)
return;
String text = jTextArea.getText();
pos = text.indexOf(keyword, 0);
if (pos == -1) {
pos = 0;
JOptionPane.showMessageDialog(null, "can not find " + keyword);
return;
}
jTextArea.setText(text.replaceFirst(keyword, jReplaceKW.getText()));
}
@Override
public void mouseReleased(MouseEvent e) {
//scroll to first keyword occurrence
try {
Rectangle rectangle = jTextArea.modelToView(pos);
jTextArea.scrollRectToVisible(rectangle);
} catch (BadLocationException e1) {
e1.printStackTrace();
}
}
});