Re: [問題] 關於final
※ 引述《foxenangel (該來的還是跑不掉阿)》之銘言:
: 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嗎?不太懂為什麼一定要宣告這個類別
: 煩請指教,謝謝!
TreeSelectionListener參閱JSE's API是一個interface class
介面實作的方式基本是作
class TSL implemets TreeSelectionListener {
//標註這是做覆寫不容易犯錯字造成新函式
@Override
public void valueChanged(TreeSelectionEvent arg0) {
....
}
}
然後addTreeSelectionListener()加入實作過的介面這樣子
所以可以如此寫作addTreeSelectionListener(new TSL());
多個名稱的話就是TSL tsl=new TSL();addTreeSelectionListener(tsl);
匿名的話可以少些設立的變數名稱,簡單的使用一個{}來實作內容
addTreeSelectionListener(new TreeSelectionListener() {
private int newValue //一樣可以設立新變數
public void newFunction //或新函式
@Override
public void valueChanged(TreeSelectionEvent arg0) {
....
}
})
這是由於值改變的時候系統會調用valueChanged()所以才去override這個方法
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.33.184.50
推
02/23 14:14, , 1F
02/23 14:14, 1F
推
02/23 14:17, , 2F
02/23 14:17, 2F
→
02/23 14:25, , 3F
02/23 14:25, 3F
推
02/23 14:26, , 4F
02/23 14:26, 4F
→
02/23 14:30, , 5F
02/23 14:30, 5F
推
02/23 14:31, , 6F
02/23 14:31, 6F
討論串 (同標題文章)