如何通过单击我的JButton来更改JLabel文本?

时间:2013-10-14 12:15:36

标签: java awt jbutton jlabel

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

class myAction extends JFrame implements ActionListener {
    myAction() {

        super("Lab 4 Question 1");

        Container c = getContentPane();
        JPanel p = new JPanel();
        JPanel p1 = new JPanel();

        JButton b = new JButton("Button 1");
        JButton b1 = new JButton("Button 2");
        JButton b2 = new JButton("Button 3");

        Font newFont = new Font("SERIF", Font.BOLD, 16);
        b1.setFont(newFont);
        b1.addActionListener(this);

        JLabel l = new JLabel("Hello.");

        p.add(b);
        p.add(b1);
        p.add(b2);
        p1.add(l);
        c.add(p);
        c.add(p1);

        c.setLayout(new FlowLayout());
        setSize(300, 300);
        show();
    }

    public static void actionPerformed (ActionEvent e) {
        if(e.getSource().equals(b))
        {
            this.l.setText("Testing");
        }
    }


    public static void main(String[] args) {
        myAction output = new myAction();
    }
}

如何让我的JButton b1改变我的JLabel l的值?我对编程很新,所以我很抱歉你们注意到的任何错误!每当我点击按钮时我只需要改变它,我认为我没有找到它但我的符号无法找到并且我很确定我不应该将它们传递给方法:S

2 个答案:

答案 0 :(得分:2)

嗯,您甚至没有为您的按钮添加ActionListener,并将actionPerformed方法设为非静态(只需删除static)。这解决了一个问题:

b.addActionListener(this);

另外,我建议使用匿名内部类,而不是直接向您的类实现ActionListener。像这样:

b.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
        //Do stuff
    }
});

另外,请制作JButton's个变种。作为实例变量(将它们移出构造函数)。

答案 1 :(得分:0)

b对于actionPerformed方法不可见,因为它是在构造函数中定义的。您需要将变量b移到myAction()之外。

class myAction extends JFrame implements ActionListener {
    JButton b;
    myAction() {
        b = new JButton("Click");