我正在尝试同时滚动两个Jtables。每个JTable都放在一个JScrollpane上,两个JScrollpane都放在一个JSplitpane上。这里是滚动的相关代码:
teststepScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
rerouteScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
teststepScrollPane.getVerticalScrollBar().setModel(
rerouteScrollPane.getVerticalScrollBar().getModel());
........
public void setTeststepTableFocus(final int teststep) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if (teststep <= teststepTable.getModel().getRowCount() - 1){
teststepTable.setRowSelectionInterval(teststep, teststep);
teststepTable.scrollRectToVisible(new Rectangle(teststepTable.getCellRect(teststep, 0, true)));
}
}
});
}
可悲的是,它根本不起作用。有任何想法吗?谢谢你的帮助。
答案 0 :(得分:0)
以下是我要做的事情:
步骤1:访问面板的滚动条:
JScrollBar verticalBar1 = teststepScrollPane.getVerticalScrollBar(); JScrollBar verticalBar2 = rerouteScrollPane.getVerticalScrollBar();
第2步:将AdjustmentListeners添加到两个ScrollBars:
verticalBar1.addAdjustmentListener(
new AdjustmentListener(){
void adjustmentValueChanged(AdjustmentEvent e){
//Change the scrollposition of the other bar here using the values
from the adjustmentEvent
}
});
对第二个滚动条执行相同操作,但更改第一个滚动条的滚动位置。
这基本上是您将侦听器添加到滚动条。无论何时滚动它们,都会收到AdjustementEvent,告诉您滚动值是递增还是递减。
这只是解决问题的一般想法。不幸的是,我现在无法编写真正的工作代码。我希望它有所帮助!
答案 1 :(得分:0)
我所做的,同时滚动两张桌子,我只是管理他们的selectionModel
。因此,当您从第一个表中选择任何行时,在第二个表中选择相同的行索引。
假设有两个表,例如table
和table1
。第一个表格(table
)位于名为scrollPane
的第一个scroll
上,第二个表格table1
位于名为scrollPane
的第二个scroll1
上。
只需将第二个表格的selectionModel
设置为第一个表格的selectionModel
,将scrollPane
的相同内容设置为:{/ p>
table.setSelectionModel(table1.getSelectionModel());
scroll.getVerticalScrollBar().setModel(scroll1.getVerticalScrollBar().getModel());
有用的链接