具有内部类的Java GUI动作侦听器

时间:2013-05-01 08:56:34

标签: java swing user-interface frame actionlistener

我正在为我的一个课程开设LAB,我需要一些帮助。

我正在构建一个公寓综合体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是从内部类中访问的;需要宣布最终 ....现在我去做了最后的决定只是为了看看发生了什么并且它有效,但我无法编辑我的复杂细节,所以这是不可能的。

我该怎么办?

谢谢!

2 个答案:

答案 0 :(得分:1)

让您的类实现ActionListener接口并使用它来添加动作侦听器,即

button.addActionListener(this);

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

答案 1 :(得分: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);
                    }
            });



  }


}

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