来自其他方法的Java访问对象

时间:2015-11-22 22:22:08

标签: java object methods

我试图制作一个按钮,当你点击它时会改变颜色:

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

public class buttonPrototype extends JPanel implements ActionListener {
public buttonPrototype() {
    boolean READY = false;
    ...
    JButton ready = new JButton("READY");
        c.fill = GridBagConstraints.HORIZONTAL;
        c.weightx = 0.5;
        c.gridx = 0;
        c.gridy = 6;
        c.gridwidth = 4;
        p.add(ready, c);
    ...
    ready.addActionListener(this);
}

@Override
public void actionPerformed(ActionEvent e) {
    if ("READY".equals(e.getActionCommand())) {
        if (READY == true) {
            READY = false;
            ready.setIcon("images/notready.png");
        } else {
            READY = true;
            ready.setIcon("images/ready.png");
        }
    }
}
}

但是,我无法使setIcon()工作,因为ready对象在另一个方法中。我已经阅读了一些在线教程,但仍然没有得到如何在第二课中引用这个对象。我该怎么做?

2 个答案:

答案 0 :(得分:0)

在你的情况下,我看到两个简单的解决方案:你应该使用其中一个,而不是两个。

第一:

JButton ready = new JButton("READY");

应该是一个成员变量,因此您只需调用它即可在侦听器中访问它:

ready.setIcon("images/ready.png");

OR

您的方法传递了一个事件。您可以通过调用:

获取源(实际上是按钮)
((JButton)e.getSource).setIcon("images/ready.png");

答案 1 :(得分:0)

我认为你必须将ready变量放在方法外面,如下所示:

public class buttonPrototype extends JPanel implements ActionListener {

    boolean READY;
    JButton ready;

    public buttonPrototype() {
        READY = false;
        ...
        ready = new JButton("READY");
        ...
        ready.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        ...
    }
}