正如您在下面看到的,我已经实现了ListSelectionListener,因此在选择第一个表中的特定行之后,第二个表将相应地更新。
class SelectionListener implements ListSelectionListener {
public SelectionListener(){}
@Override
public void valueChanged(ListSelectionEvent e)
{
if (e.getSource() == myTrumpsAndMessages.jTable1.getSelectionModel()
&& myTrumpsAndMessages.jTable1.getRowSelectionAllowed()
&& e.getValueIsAdjusting())
{
int selected = myTrumpsAndMessages.jTable1.getSelectedRow();
clearjTable(jTable4);
showSubscribers(selected);
}
}
}有没有一种方法不仅可以在鼠标选择时调用侦听器,也可以在通过键盘进行选择时调用侦听器?
发布于 2012-08-30 16:58:48
出现这种不寻常体验的原因是,键盘和鼠标触发的选择事件的valueIsAdjusting设置略有不同:
这一事实与不同寻常的逻辑相结合( @Robin发现了,+1 to他:-)
if (e.getSource() == myTrumpsAndMessages.jTable1.getSelectionModel()
&& myTrumpsAndMessages.jTable1.getRowSelectionAllowed()
// typo/misunderstanding or feature? doing stuff only when adjusting
&& e.getValueIsAdjusting()) (仅当选择正在调整时才进行反应)导致看不到键盘触发的更改。
发布于 2012-08-30 16:18:28
有没有一种方法不仅可以在鼠标选择时调用侦听器,也可以在通过键盘进行选择时调用侦听器?
监听程序将被触发,与选择更改的来源无关。所以,是的,这是完全可能的,甚至是默认行为。因此,不需要做任何特殊的事情来使其正常工作。
查看您的侦听器的代码,我建议将其重写为
class SelectionListener implements ListSelectionListener {
public SelectionListener(){}
@Override
public void valueChanged(ListSelectionEvent e){
if ( e.getValueIsAdjusting() ){
return;
}
if (e.getSource() == myTrumpsAndMessages.jTable1.getSelectionModel() &&
myTrumpsAndMessages.jTable1.getRowSelectionAllowed() ) {
int selected = myTrumpsAndMessages.jTable1.getSelectedRow();
clearjTable(jTable4);
showSubscribers(selected);
}
}
}注意当getValueIsAdjusting()返回true时方法的快速中断,因为这是您在大多数情况下想要的行为。
发布于 2012-08-30 04:38:22
我刚刚尝试了一个ListSelectionListener,valueChanged()事件实际上也是在键盘选择更改时触发的。下面是我的例子:
list.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
System.out.println(list.getSelectedValue());
}
});https://stackoverflow.com/questions/12186054
复制相似问题