按下JToggleButton时Java do方法

时间:2016-06-27 06:12:31

标签: java swing user-interface

目标

我正在尝试实现在按下Swing JToggleButton时调用方法的代码。返回MainCode.intGenerate的{​​{1}}方法会收到List<Integer>

限制

Random_gen_Button是这样声明的,并且由于NetBeans保护它而不可更改。我可以用记事本来打开它但是我不允许我改变它,所以我不会。

List<Integer>

代码

private JToggleButton RANDOMGENBUTTON; 

可能的解决方案

我认为这应该可以通过另一个线程实现,但我不知道如何做到这一点。

错误

此代码不起作用,因为它冻结了GUI,我无法再次按下JToggle按钮,导致无限循环。

修改

intGenerate()

private void RANDOMGENBUTTONActionPerformed(java.awt.event.ActionEvent evt) {                                             
    if(RANDOMGENBUTTON.isSelected()) {
        EXITBUTTON.setEnabled(false);
        List<Integer> INPUTLIST = new ArrayList<Integer>();
        while(RANDOMGENBUTTON.isSelected()) {
            INPUTLIST = MainCode.intGenerate(INPUTLIST);
        }
    }else {
        EXITBUTTON.setEnabled(true);
    }
}

1 个答案:

答案 0 :(得分:2)

其他线程使用java.swing.Timer,定期告知您的组件自行更新。在下面的示例中,当按钮被选中或按钮的模型显示按下时,计时器的监听器会更新按钮的文本。

image

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JToggleButton;
import javax.swing.Timer;

/**
 * @see http://stackoverflow.com/a/38051563/230513
 */
public class Test {

    private final Random r = new Random();

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JToggleButton button = new JToggleButton("0000");
        f.add(button);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
        Timer t = new Timer(100, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (button.isSelected() | button.getModel().isPressed()) {
                    button.setText(String.valueOf(r.nextInt(9000) + 1000));
                }
            }
        });
        t.start();
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Test()::display);
    }
}

顺便说一句,不要让GUI编辑器决定你的设计。