2012-11-03 65 views
2

我有下面的代码片段JScrollPane中设置滚动位置

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到滚动窗格。为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()); 

现在的方法我动态设置文本现在我的查询时,显示较长的文本,滚动条出现,但作为滚动0而不是一些增加值的System.out.println打印位置。

为什么这样?

+0

水平或垂直滚动​​位置?位于JScrollBar上的滑块在哪里?此外,您的问题标题是关于*设置*滚动位置,当您确实似乎在询问*获取*滚动位置。这是什么? –

+0

我想我是用隐形墨水在上面写下我的评论的? –

+0

我的问题并不清楚,因为你的评论听起来很正确。它已经很清楚,并且从下面的一条评论中得到了答案。无论如何,谢谢 –

回答

4

我能想到的唯一原因是因为视口位置没有改变。

首先想到的是,视口可能还没有对从文本开始设置的位置变化作出反应,因此在设置文本后立即转储结果反映了当前状态滚动条(还未开始更新)

你可以尝试

SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     System.out.println("Position: "+sf.query_scroll_pane.getHorizontalScrollBar().getValue());   
    } 
}); 

代替,看看是否能打印出更先进的日期值

Alternativly,你可以添加一个AdjustmentListener滚动酒吧,当变化发生JScrollBar#addAdjustmentListener

+0

Ya MadProgrammer。上面的代码片段正在打印最新的值。所以有没有任何倾销方法或使用上面的codenippet是唯一的选择? –

+0

取决于你想要达到的目标。如果您想知道该值何时更改,您需要将一个AdjustmentListener附加到滚动条上,该值会在值更改时自动通知您 – MadProgrammer

1

将通知现在我的查询时,显示较长的文本,滚动条出现,但 的System.out.println打印滚动条的位置为0而不是一些 增加值。

使用

query_area = new JTextArea(); 
DefaultCaret caret = (DefaultCaret) query_area.getCaret(); 
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); 
+0

否这也不起作用。 MadProgrammer的方式虽然工作。感谢您的时间。 –