繁体   English   中英

动态创建的Swing组件的侦听器

[英]Listeners to dynamically created Swing Components

我正在动态创建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迫使我将新Table设为final ,据我所知, final变量以后不能更改,这有什么问题吗? 我这样做正确吗?

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

最终变量以后不能更改,但是您是否需要在while循环之外更改最终局部变量?

如果是,插入数组或列表,然后将引用存储在那里。

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

可以避免出现最后问题的方法:

创建另一个实现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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM