actionPerformed无法查看JButtons的引用变量

时间:2017-03-20 19:42:10

标签: java swing

我一直试图让两个按钮工作。 但是,似乎actionPerformed无法看到我的按钮。

我尝试过的事情: - 检查我的import语句,它们似乎是正确的 - 检查缺少的括号 - 检查我是否意外地将actionPerformed放入构造函数中 - 检查了访问修饰符 - 检查变量名称

到目前为止,我迷失了为什么它无法解决button1和button2的符号。

请帮帮忙?

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionListener;



public class Wisselscherm
        extends JFrame
        implements ActionListener {




    public Wisselscherm(Wisselkoers wisselkoers){

        String munt1 = String.valueOf(wisselkoers.getMunt1().getNaam() );
        String munt2 = String.valueOf(wisselkoers.getMunt2().getNaam() );
        setTitle(munt1 +  " - " + munt2 + " Converter" );


        setSize(500,500);
        setLayout(new FlowLayout());

       String teken1 = String.valueOf(wisselkoers.getMunt1().getTeken() );
       JLabel munteenheid1 = new JLabel(teken1);
       add(munteenheid1);


       JTextField textf1 = new JTextField(10);
       add(textf1);

       JButton button1 = new JButton(">>");
       add(button1);
       button1.addActionListener(this);

       JButton button2 = new JButton("<<");
       button2.addActionListener(this);
       add(button2);


       String teken2 = String.valueOf(wisselkoers.getMunt2().getTeken() );
       JLabel munteenheid2 = new JLabel(teken2);
       add(munteenheid2);

       JTextField textf2 = new JTextField(10);
       add(textf2);


        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == button1) {
            System.out.println("Button1 is pressed");

        } else if (e.getSource() == button2) {
            System.out.println("Button2 is pressed");
        }

    }



}

2 个答案:

答案 0 :(得分:2)

您的按钮被定义为Wisselscherm构造函数的局部变量,因此它们不能在其上下文之外访问

你可以......

使它们成为实例变量,这样就可以从整个类中访问它们

你可以......

使用anonymous listeners,这样您就可以将单个侦听器与每个按钮相关联,这意味着您可以获得触发ActionListener

的内容

你可以......

利用actionCommandJButton的{​​{1}}属性将侦听器与事件源分离,允许您重复使用ActionEvent生成相同ActionListener的其他按钮/操作。

默认情况下,actionCommand将是按钮的文本,如果没有直接设置

你可以......

使用actionCommand API

全部或者,您应该仔细查看How to Write an Action ListenersHow to Use ActionsHow to Use Buttons, Check Boxes, and Radio Buttons了解更多详情

答案 1 :(得分:2)

这是一个范围问题,只需将MainPage = new HomePage (Adapter, IsLoggedIn); button1移到类的范围级别:

button2

然后你可以:

public class Wisselscherm extends JFrame implements ActionListener {

    JButton button1;
    JButton button2;

    ...

(请注意,我删除了该行中的button1 = new JButton(">>"); 个字词)