Onc*_*nca 7 java swing jtable listselectionlistener
我已经实现了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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在鼠标选择时调用监听器,还有从键盘选择的时候?
不寻常体验的原因 - 没有通过键盘选择的通知 - 是一个微妙的不同设置valueIsAdjusting键盘与鼠标触发的选择事件:
这个事实加上了不同寻常的逻辑(@Robin发现,+1给他:-)
if (e.getSource() == myTrumpsAndMessages.jTable1.getSelectionModel()
&& myTrumpsAndMessages.jTable1.getRowSelectionAllowed()
// typo/misunderstanding or feature? doing stuff only when adjusting
&& e.getValueIsAdjusting())
Run Code Online (Sandbox Code Playgroud)
(仅当选择反应时调整)导致没有看到键盘引起的变化.
有没有办法在鼠标选择时调用监听器,还有从键盘选择的时候?
将独立于选择更改的来源触发侦听器.所以,是的,这是完全可能的,甚至是默认行为.因此,必须采取一些特殊措施来实现这一目标.
看一下你的监听器的代码,我建议把它改写成
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意getValueIsAdjusting()返回时从方法快速中断,true因为这是大多数情况下您想要的行为.
| 归档时间: |
|
| 查看次数: |
1844 次 |
| 最近记录: |