调用方法更新

时间:2016-01-13 23:03:27

标签: java class methods actionlistener

我正在制作一个简单的程序来更新你点击的次数,这是我的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)'

1 个答案:

答案 0 :(得分:0)

这很容易。你的actionListener持有对不同Class1对象的引用,然后是你在屏幕上看到的对象。

尝试将Class1实例作为构造函数参数传递,一切都会好的。尝试这样的事情:

在clickListener中替换 带有构造函数的Class1 object = new Class1();

Class1 object;
public clickListener(Class1 obj){
    object=obj;
}

并在Class1中使用我们的构造函数。

button.addActionListener(new clickActionListener(this));

不会起作用。