如何在同一个类中一次又一次地对同一个东西执行actionListener?

时间:2013-12-14 23:33:07

标签: java swing user-interface

如果我想一次又一次地对某个按钮执行ActionListener,那么我该怎么办呢,这样它就不会再给我同样的答案......

例如:

down = new JButton("DOWN-1");
down.setSize(down.getPreferredSize());
down.setLocation(100,200);
down.addActionListener(this);
left=new JButton("LEFT-1");
left.setSize(left.getPreferredSize());
left.setLocation(100,250);
left.addActionListener(this);
right=new JButton("RIGHT-1");
right.setSize(right.getPreferredSize());
right.setLocation(100,300);
right.addActionListener(this);
up1=new JButton("UP-2");
up1.setSize(up1.getPreferredSize());
up1.setLocation(550,150);
up.addActionListener(this);

@Override
public void actionPerformed(ActionEvent a)
{
    int counter=370;

    if (a.getSource()==up) {
        System.out.println(counter);

        x=250+62+62;
        y=60+62+62+62+62+62;
        b1.setLocation(x,counter-62);
        l19.setLocation(x,counter);
    }   
}

在这里,我想一次又一次地使用向上按钮,但它不起作用......

1 个答案:

答案 0 :(得分:0)

虽然你的问题太令人困惑了。我想我已经能够提取一些的含义了。 “......如果我想一次又一次地在按钮上执行ActionListener,......”。我的猜测是,你的意思是你希望能够多次使用该按钮。

这就是我在您的代码中看到的那些会让您认为您无法多次使用它的内容。

@Override
public void actionPerformed(ActionEvent a)
{
    int counter=370;

    if (a.getSource()==up) {
        System.out.println(counter);

        x=250+62+62;
        y=60+62+62+62+62+62;
        b1.setLocation(x,counter-62);
        l19.setLocation(x,counter);
    }   
}

发生的事情是,只需点击按钮,位置始终设置为相同的位置。初始位置我不同,这就是为什么它似乎在第一次点击(位置将改变)。但在那之后,每次点击都会导致相同的位置,所以无论你想要移动什么,都不会。

虽然我不知道你的代码是做什么的,但是从你最小的“解释”(如果你甚至可以称之为)。我可以提一个建议。似乎counter是偏移因子,因此您可能想要做的是给counter一个全局范围,并在每次单击按钮时更改其值。像这样的东西

int counter = 370;

@Override
public void actionPerformed(ActionEvent a)
{
    if (a.getSource()==up) {
        counter -= 62;         // this is where you change the value of counter

        System.out.println(counter);

        x=250+62+62;           // I have no idea what this is for
        y=60+62+62+62+62+62;   // or this, so I won't comment
        b1.setLocation(x,counter);   // just use the new counter value
        l19.setLocation(x,counter);
    }   
}