我正在制作一个简单的程序来更新你点击的次数,这是我的actionlistener:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JLabel;
public class clickActionListener implements ActionListener {
Class1 object = new Class1();
@Override
public void actionPerformed(ActionEvent arg0) {
object.click();
}}
***这是我在class1类中的click方法:
public void click(){
clicks++;
label.setText("You clicked "+ clicks+" times");
}
它不起作用。但是当我删除我的click类并将其内容放入actionlistener本身时(假设我正确关联了所有内容),它可以工作:
public class clickActionListener implements ActionListener {
Class1 object = new Class1();
int click;
JLabel label2;
public clickListener(int clicks, JLabel label) {
click = clicks;
label2 = label;
}
@Override
public void actionPerformed(ActionEvent arg0) {
click++;
label2.setText("You clicked "+ click+" times");
}
如果有人能告诉我我做错了什么,我会非常感激。谢谢,抱歉这个杂乱的帖子。
***更新
很抱歉不清楚,“不起作用”我的意思是jlabel没有更新并保持在0.
这是“不起作用”的Class1代码
import java.awt.Gridlayout;
import java.awt.event.ActionListener;
import javax.swing.*;
public Class1{
int clicks=0;
JLabel label=new JLabel("You clicked "+clicks+" times.");
public void method(){
JFrame frame=new JFrame();
JButton button=new JButton("Click this");
button.addActionListener(new clickActionListener());
frame.add(button):
frame.add(label);
frame.pack();
frame.setVisible(true);
}
public void clicks(){
clicks++;
label.setText("You clicked "+clicks+" times"):}}
运行的Class1与上面相同只是我摆脱了click()方法并将JLabel和int放入'new clicklistener(clicks,label)'
答案 0 :(得分:0)
这很容易。你的actionListener持有对不同Class1
对象的引用,然后是你在屏幕上看到的对象。
尝试将Class1
实例作为构造函数参数传递,一切都会好的。尝试这样的事情:
在clickListener中替换
带有构造函数的Class1 object = new Class1();
Class1 object;
public clickListener(Class1 obj){
object=obj;
}
并在Class1中使用我们的构造函数。
button.addActionListener(new clickActionListener(this));
不会起作用。