侦听器动态创建Swing组件

时间:2013-02-28 08:47:48

标签: java swing jtable

我正在动态创建jTABLESjTABLES的数量取决于数据库。

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变量以后不能更改,这里有什么问题吗?我这样做是正确的吗?

3 个答案:

答案 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));