0

我正在为我的一门课程开发实验室,需要一些帮助。

我正在构建一个 Apartment Complex 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;需要被宣布为最终...。现在我进行了最终声明,只是为了看看发生了什么并且它起作用了,但我无法编辑我的复杂细节,所以这是不可能的。

我能做些什么?

谢谢你!

4

2 回答 2

1

让你的类实现 ActionListener 接口并使用它来添加一个动作监听器,即

button.addActionListener(this);

http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html

于 2013-05-01T09:05:38.357 回答
0

如果使用匿名类,则应将类中使用的参数设置为当前块中的最终类型或成员私有变量。

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);
                    }
            });



  }


}

我认为你应该重新考虑你的程序结构。如果你告诉我们完整的目的,你会得到更好的答案。

于 2013-05-01T09:17:02.373 回答