我有以下代码spippet
query_area = new JTextArea("");
query_scroll_pane = new JScrollPane(query_area);
query_scroll_pane.setSize(1000,80);
query_scroll_pane.setLocation(10,10);
query_panel.add(query_scroll_pane);
这将我的文本方面添加到scrollpane中。现在,在一种方法中,我将Textarea的文本设置为
sf.query_area.setText("Query "+(sf.query_counter)+sf.query_store[sf.query_counter]);
System.out.println("Position: "+sf.query_scroll_pane.getHorizontalScrollBar().getValue());
现在,我的查询是显示更长的文本时,出现卷轴,但是system.out.println将滚动条的位置打印为0,而不是增加值。
为什么要??
我能想到的唯一原因是因为视图端口位置没有更改。
想到的第一件事是,视图端口可能还没有对文本开始设置的位置的变化做出反应,因此在设置后立即倾倒结果,文本反映了反映的当前状态滚动条(尚未开始更新)
您可以尝试
SwingUtilities.invokeLater(new Runnable() {
public void run() {
System.out.println("Position: "+sf.query_scroll_pane.getHorizontalScrollBar().getValue());
}
});
相反,看看它是否打印出更新的值
替代,您可以在滚动栏中添加AdjustmentListener
,该滚动条将在更改发生JSCrollbar#AddAdjustmentListener
现在我的查询是显示更长的文本,显示卷轴,但 system.out.println打印滚动栏的位置为0,而不是某些 增加价值。
使用
query_area = new JTextArea();
DefaultCaret caret = (DefaultCaret) query_area.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);