2013-05-01 70 views
0

我正在爲我的課程之一開發一個LAB,並且需要一些幫助。帶有內部類的Java GUI動作監聽器

我正在建設一個公寓大樓GUI,它將有一個菜單系統和許多不同類別之間的單獨功能。由租戶,員工和銀行組成的綜合體。

我目前有整個項目基於控制檯的工作,但現在我被分配將其轉換爲GUI界面。

這是GUI在我的主函數的代碼:

ApartmentComplex mavPlace = new ApartmentComplex(); //creates a new apartment complex object 
    mavPlace.aptBank.setBalance(ANNUAL_BUDGET); //sets the apartment bank budget 
    readFile(mavPlace); 

    mavPlace.goThroughAndAssignValues(mavPlace); 
    JFrame frame = new JFrame("My First GUI"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(300,300); 
    JButton button = new JButton("Press"); 
    frame.getContentPane().add(button); // Adds Button to content pane of frame 
    frame.setVisible(true); 

    button.addActionListener(new ActionListener() 
      { 
        public void actionPerformed(ActionEvent e) 
        { 
         //Execute when button is pressed       
         mavPlace.lease(mavPlace); 
        } 
      }); 

隨着動作偵聽器,當按下按鈕時就應該調用一個函數租賃在另一個類礦井。從那裏我想它回到控制檯輸出。 netbeans給我的錯誤是:局部變量mavPlace從內部類訪問;需要被宣佈爲最終 ....現在我去了一個制定的decleration最後只是爲了看看發生了什麼,它的工作,但我無法編輯我的複雜細節,所以這是不可能的。

我該怎麼辦?

謝謝!

+1

'最終ApartmentComplex temp = mavPlace;',並使用'temp'代替動作偵聽器中的'mavPlace' – iluxa 2013-05-01 08:58:21

回答

0

如果使用匿名類,你應該設置在類爲final類型使用的參數在當前塊中或作爲成員私有變量。

class MyGUI 
{ 
    ApartmentComplex mavPlace; 
    public MyGUI() 
    { 
    JFrame frame = new JFrame("My First GUI"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(300,300); 
    JButton button = new JButton("Press"); 
    frame.getContentPane().add(button); // Adds Button to content pane of frame 
    frame.setVisible(true); 
    mavPlace = new ApartmentComplex(); //creates a new apartment complex object 
    mavPlace.aptBank.setBalance(ANNUAL_BUDGET); //sets the apartment bank budget 
    readFile(mavPlace); 

    mavPlace.goThroughAndAssignValues(mavPlace); 
    button.addActionListener(new ActionListener() 
      { 
        public void actionPerformed(ActionEvent e) 
        { 
         //Execute when button is pressed       
         mavPlace.lease(mavPlace); 
        } 
      }); 



    } 


} 

我認爲你應該重新考慮你的程序結構。 如果你告訴我們完整的目的,你會得到更好的答案。