簡體   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