【问题标题】:JScrollPane Set Scroll PositionJScrollPane 设置滚动位置
【发布时间】:2012-10-24 03:54:21
【问题描述】:

我有以下代码 sn-p

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 的文本动态设置为

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 而不是一些增加的值。

为什么会这样??

【问题讨论】:

  • 水平或垂直滚动​​条位置? JScrollBar 上的滑块在哪里?另外,您的问题标题是关于 set 滚动位置的,而您实际上似乎是在询问 getting 滚动位置。是哪个?
  • 我猜我上面的评论是用隐形墨水写的?
  • 我的问题并不像您的评论那样不清楚。很清楚,也得到了下面一位 cmets 的回答。还是谢谢

标签: java swing jscrollpane jscrollbar adjustment


【解决方案1】:

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

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

你可以试试

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

然后看看是否打印出更新的值

或者,您可以在滚动条中添加AdjustmentListener,当发生更改时会通知JScrollBar#addAdjustmentListener

【讨论】:

  • 你是疯狂程序员。上面的代码 sn-p 正在打印最新的值。那么是否有任何转储方法或使用上述代码n-p是唯一的选择??
  • 取决于您想要实现的目标。如果你想知道值什么时候发生变化,你需要在滚动条上附加一个 AdjustmentListener,当值变化时它会自动通知你
【解决方案2】:

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

使用

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

【讨论】:

  • 不,这也不起作用。 MadProgrammer 的方法虽然奏效了。感谢您的宝贵时间。
猜你喜欢
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 2011-04-03
  • 1970-01-01
  • 2012-08-19
相关资源
最近更新 更多