我试图制作一个按钮,当你点击它时会改变颜色:
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对象在另一个方法中。我已经阅读了一些在线教程,但仍然没有得到如何在第二课中引用这个对象。我该怎么做?
答案 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) { ... } }