0

我正在动态创建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以后不能更改变量,这里有什么问题吗?我这样做对吗?

4

3 回答 3

2

当您在匿名内部类中使用变量(外部变量)时,必须将其声明为 final。这就是 netbeans 强迫你这样做的原因。

于 2013-02-28T09:01:44.157 回答
1

最终变量不能稍后更改,但您需要将最终局部变量更改为while循环之外吗?

如果是,则插入一个数组或列表并将引用存储在那里。

final 需要在匿名内部类(您的侦听器)中使用引用。

于 2013-02-28T08:57:12.830 回答
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));
于 2013-02-28T09:05:29.723 回答