我正在尝试制作一个在按下时切换按钮状态(更改颜色和文本)的按钮。但是我无法使addActionListener正常工作,也无法从主类中找到ToggleState方法。我是Java新手,不胜感激。
我得到错误
-“ AbstractButton类型的方法addActionListener(ActionListener)不适用于自变量”
-“ ActionListener无法解析为类型”
package Grafiktest;
import javax.swing.*;
import java.awt.*;
public class coolgrafik extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private JPanel panel;
private JLabel label;
public coolgrafik(){
//super(title);
setSize(400,60);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new JPanel();
panel.setBackground(Color.GRAY);
label = new JLabel("test");
panel.add(label);
MyButton button = new MyButton(Color.green, Color.red, "RUN","STOP");
panel.add(button);
button.addActionListener(this);
add(panel);
}
public static void main(String[] args){
new coolgrafik().setVisible(true);
//toggleState(Color.green, Color.red, "RUN","STOP");
}
public void actionPerformed(ActionEvent e) {
toggleState(Color.green, Color.red, "RUN","STOP");
}
}
这是按钮类
package Grafiktest;
import javax.swing.*;
import java.awt.*;
public class MyButton extends JButton{
private static final long serialVersionUID = 1L;
public MyButton(Color c1, Color c2, String s1, String s2){
setText(s1);
setForeground(c1);
setBackground(c1);
setOpaque(true);
}
public void toggleState(Color c1, Color c2, String s1, String s2){
setText(s2);
setForeground(c2);
setBackground(c2);
setOpaque(true);
}
}
最佳答案
“类型为AbstractButton的方法addActionListener(ActionListener)不适用于参数”-“无法将ActionListener解析为类型”
您没有导入ActionListener类,因为它不在java.awt。*中,而是在java.awt.event.ActionListener中-供参考https://docs.oracle.com/javase/7/docs/api/java/awt/event/ActionListener.html
但是我仍然不能使用来自actionperformer的toggleState方法。怎么来的?
在您的void actionPerformed(ActionEvent)
中,您尝试调用一个名为void toggleState(Color,Color,String,String)
的方法-但它不是在同一类中声明的,也不是静态导入的。
您显然想在类toggleState
的对象button
上调用MyButton
方法,为此您必须像button.toggeState(...)
那样在该对象上调用方法
这也不会直接起作用,因为您的对象button
仅在构造函数中已知,并且您必须像在面板上一样将对象属性添加到coolgrafik类中-然后它应该可以正常工作
这是您在coolgrafik类中需要更改的代码片段
属性:
private JPanel panel;
private JLabel label;
private MyButton button;
在您的coolgrafik构造函数中
//...
this.button = new MyButton(Color.green, Color.red, "RUN","STOP");
this.panel.add(this.button);
this.button.addActionListener(this);
//...
和你的actionPerformed方法
public void actionPerformed(ActionEvent e) {
button.toggleState(Color.green, Color.red, "RUN","STOP");
}