我有以下代码段
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);
将我的textarea添加到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而不是某些增加的值。
为什么这样?
答案 0 :(得分:4)
我能想到的唯一原因是因为视口位置没有改变。
首先想到的是,视口可能尚未对文本开始集中的位置变化作出反应,因此在设置文本后立即转储结果反映了当前状态滚动条(尚未开始更新)
你可以尝试
SwingUtilities.invokeLater(new Runnable() {
public void run() {
System.out.println("Position: "+sf.query_scroll_pane.getHorizontalScrollBar().getValue());
}
});
而是查看是否打印出更新的值
另外,您可以在滚动条中添加AdjustmentListener
,这会在发生更改时通知JScrollBar#addAdjustmentListener
答案 1 :(得分:1)
现在我的查询是当显示更长的文本时,会出现滚动条 system.out.println将滚动条的位置打印为0而不是一些 价值增加。
使用
query_area = new JTextArea();
DefaultCaret caret = (DefaultCaret) query_area.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);