我正在动态创建jTABLES
。 jTABLES
的数量取决于数据库。
while(rset.next())
{
//Create Scroll Pane
JScrollPane newScrollPane = new JScrollPane();
//Create Table
JTable newTable = new JTable();
//Add Table to Scroll Pane
newScrollPane.setViewportView(newTable);
//Add Scroll Pane to a Tabbed Pane
jTabbedPane1.addTab(rset.getString(1),newTable);
}
我需要为每个MouseListener
添加jTABLE
,它基本上是相同的侦听器,同样的动作。
while(rset.next())
{
//Table Created.....
newTable.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
String data = newTable.getValueAt(0,0).toString();
}
//More Abstract Methods...
});
}
Netbeans,迫使我制作新表final
,据我所知,final
变量以后不能更改,这里有什么问题吗?我这样做是正确的吗?
答案 0 :(得分:2)
当您在匿名内部类中使用变量(外部变量)时,必须将其声明为final。这就是netbeans强迫你这么做的原因。
答案 1 :(得分:1)
最终变量以后无法更改,但是您是否需要更改while
循环中的最终局部变量?
如果是,请关注数组或列表并将引用存储在那里。
final需要在anonimous内部类(你的监听器)中使用引用。
答案 2 :(得分:0)
您可以采取哪些措施来避免最终问题:
创建另一个实现MouseListener的类。
class MyMouseListener extends MouseListener {
JTable table;
public MyMouseListener(JTable table) {
this.table = table;
}
然后在任何方法中使用该表。
public void mouseClicked(MouseEvent e) {
String data = table.getValueAt(0,0).toString();
}
然后将该鼠标监听器添加到表中。
myTable.addMouseListener(new MyMouseListener(myTable));