我正在编写一个应用程序包,其中包含一个主类,其中主要方法是从GUI类中分离出来的,而GUI类包含一个带有jtabbedpane的jframe,它有两个选项卡,第一个选项卡包含一个jtable,调用它jtable1,第二个选项卡包含3个表,称之为jtable2,jtable3和jtable4,我已经在GUI类构造函数中添加了在主类的新实例中调用,我在这个GUI类构造函数中添加了一个ListSelectionListener到第一次jtable:
jTable1.getSelectionModel().addListSelectionListener((ListSelectionEvent event) -> { // do some actions here, for example /* my code */ });
并且凭借良好的命运,这种选择非常有效, 我还将ChangeListener添加到GUI类构造函数中的jtabbedpane,该构造函数也很好用:
jTabbedPane1.addChangeListener((ChangeEvent e) -> {
/* my code */
});
但是当我尝试将GUI类构造函数中的ListSelectionListener添加到第一个表(我们称之为jtable2)时,在第二个选项卡中包含三个表并将ListSelectionListener添加到它们中,它没有响应任何选择,以及将ListSelectionListener添加到jtable2的代码是:
jTable2.getSelectionModel().addListSelectionListener((ListSelectionEvent event) -> { System.out.println("jTable2 Selected"); /* mycode */ });
毫无疑问,问题是问题是什么以及如何解决?但如果不简单,可能性是什么,或者我如何解释更多?
注意:ListSelectionListener的添加将在第二个选项卡(jtable3和jtable4)中的其他表上完成,并且它将被添加到愿意创建并包含表的其他计划选项卡
感谢您寻找和关怀
答案 0 :(得分:0)
问题在于重新创建未听过的动作jtable中的jTabbedPane更改,因为在每个标签更改中,我正在重新创建jtable以使用新输入的信息更新它其他标签的jtables:
jTabbedPane1.addChangeListener((ChangeEvent e) -> {
if(jTabbedPane1.getSelectedIndex() == 1)
{
jTable2 = new javax.swing.JTable(){
DefaultTableCellRenderer renderRight =
new DefaultTableCellRenderer();
{ // initializer block
renderRight.setHorizontalAlignment(SwingConstants.RIGHT);
}
@Override
public TableCellRenderer getCellRenderer (int arg0, int arg1)
{
return renderRight;
}
public boolean isCellEditable(int row, int column) {
return false;
};
}});
jTable2.setAutoCreateRowSorter(true);
jTable2.setFont(new java.awt.Font("Traditional Arabic", 0, 23));
jTable2.setRowHeight(25);
DefaultTableModel workersJtableForFamilyModel =
new DefaultTableModel();
/* update model with columns and rows, and set it */
}
});
所以,问题在于重新创建jtable,因此内存中的监听和观察的jtable对象从指向和侦听中遗漏,因此解决方案是更新jtable的模型而不创建新的jtable对象然后将它设置为jtable:
jTabbedPane1.addChangeListener((ChangeEvent e) -> {
if(jTabbedPane1.getSelectedIndex() == 1)
{
DefaultTableModel workersJtableForFamilyModel =
new DefaultTableModel();
/* Feed the model with new columns and rows */
/* write updated Model prepration statements */
/* set the updated model to the jtable */
jTable2.setModel(workersJtableForFamilyModel);
}
});