看板 java 關於我們 聯絡資訊
請問一下 我在關於swing的書中讀到JTree的程式碼 但是對於一小段有點疑惑 片段如下 final JLabel messageLabel=new JLabel("Nothing selected."); ^^^^^ add(messageLabel, BorderLayout.SOUTH); tree.addTreeSelectionListener(new TreeSelectionListener() { public void valueChanged(TreeSelectionEvent e) { TreePath tp=e.getNewLeadSelectionPath(); messageLabel.setText("Selected: "+tp.getLastPathComponent() ); } ^^^^^^^^^^^^ }); 我查小螞蟻他說final指定出不可修改的變數,我不了解的是為什麼我把final拿掉的話 會出現錯誤訊息:local variable messageLabel is accessed from within inner class ; needs to declared final 另外,我想請問addTreeSelectionListener那段裡面的valueChanged這個類別可以拉出來 跟addTreeSelectionListener成同一個scope嗎?不太懂為什麼一定要宣告這個類別 煩請指教,謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.138.152.25
PsMonkey:==.=== valueChanged 是類別? 02/23 13:11
foxenangel:錯誤訊息寫inner class,所以我想它是類別... 02/23 13:16
查到了http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/InnerClass.htm valueChanged是內部匿名類別,messageLabel是區域變數,valueChanged在用這個變數 時,實際上是複製一份,所以要宣告成final,以防變更 ※ 編輯: foxenangel 來自: 140.138.152.25 (02/23 13:30)
tkcn:valueChanged "不" 是內部匿名類別.. 02/23 13:34
snowlike:內部類別指的是TSL,valueChanged是該介面必須覆寫的方法 02/23 13:37
foxenangel:可以請問是什麼嗎?? 02/23 13:37
foxenangel:S大請問可以解釋清楚一點嗎,新手看不太懂 T_T 02/23 13:38