复选框上的事件

Event on chekbox

我正在 swing 中开发一个 Java 界面编码,我使用了一个复选框。 我希望当我点击复选框时它会产生一个连续的事件(因为在这个事件中我做了一个纬纱并将它发送到微控制器)但我不知道该怎么做。 我尝试制作一个 ActionListener 但它只执行一次操作。

谁能帮帮我? :)

这是我试过的代码:

checkbox.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {

                    // ------------------------------------------------------------|
                    // Déclaration des variables de la trame de la liaison
                    // montante|
                    // -----------------------------------------------------------|
                    float capGPS = -30;
                    float longi = 30;
                    float lat = 50;
                    float h = 50;
                    float capM = 50;
                    float V = 50;
                    float R = 50;
                    float Tsurvol = 50;
                    float Dist = 45;
                    float phiE = -30;
                    float thetaE = 30;
                    float psiE = 45;
                    float psiScan = 30;
                    float TfCam = 0;

                    String strRealFR = thetafld.getText();

                    float thetaCam = Float.valueOf(strRealFR);

                    float psiCam = Float.valueOf(psifld.getText());
                    byte[] length = new byte[1];
                    length[0] = 7;
                    byte[] typeMission = new byte[1];
                    typeMission[0] = 1;
                    // -----------------------------------------------------|
                    // Initialisation du tableau d'octets contenant la
                    // trame|
                    // ----------------------------------------------------|
                    byte[] trame = new byte[0];
                    trame = Tools.concatenateByteArrays(trame,
                            "$".getBytes());// StarFlag
                    trame = Tools.concatenateByteArrays(trame,
                            "!".getBytes());// Flag Nav
                    trame = Tools.concatenateByteArrays(trame,
                            "M".getBytes());// Mémorisation
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(capGPS));// CapGPS
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(longi));// Longitude
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(lat));// Latitude
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(h));// Altitude
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(capM));// Cap
                                                                // Magnétque
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(V));// Vitesse
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(R));// Rayon de
                                                            // révolution
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(Tsurvol));// Temps de
                                                                    // survol
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(Dist));// Distance
                    trame = Tools.concatenateByteArrays(trame,
                            "Rt".getBytes());// Retour au point initial
                    trame = Tools.concatenateByteArrays(trame,
                            "§".getBytes());// flag attitude
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(phiE));// Angle de
                                                                // roulis
                    trame = Tools.concatenateByteArrays(trame, typeMission);// Type
                                                                            // de
                                                                            // mission
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(thetaE));// Angle de
                                                                // tangage
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(psiE));// Angle de
                                                                // lacet
                    trame = Tools.concatenateByteArrays(trame,
                            "#".getBytes());// mode de fonctionnement
                    trame = Tools.concatenateByteArrays(trame,
                            "o".getBytes());// Marche/Arret
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(-thetaCam));// Tangage
                                                                    // caméra
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(psiCam));// Angle de
                                                                // lacet
                                                                // caméra
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(psiScan));// vitesse
                                                                    // de
                                                                    // balayage
                                                                    // caméra
                    trame = Tools.concatenateByteArrays(trame,
                            Tools.convertSingleToBytes(TfCam));// tems de
                                                                // fonctionnement
                                                                // de la
                                                                // caméra
                    trame = Tools.concatenateByteArrays(trame,
                            "*".getBytes());// fin de trame

                    try {
                        if (port != null) {
                            fluxEcriture.write(trame);

                        }
                    } catch (IOException ex) {
                        System.err.println(ex.getMessage());
                    }

                } // fin actionPerformed

            }); 

(抱歉我的英语不好,我是法国学生.... :/ )

我建议你使用 timers 并在检查 checkbox

时重复你想要的代码
 Timer timer = new Timer(1000, new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    //do your stuff here
                }
            });
            timer.start();

无论如何,您不应该在 EDT 上做那么多与图形用户界面无关的工作。

创建一个新的java.util.Timer并在actionPerformed方法中调用Timer#scheduleAtFixedRate不要使用 javax.swing.Timer,因为它在 EDT 上执行,而且您似乎在 actionPerformed 方法中处理了很多与图形用户界面无关的事情。相反,使用 EventQueue.invokeLater 到 post 与 EDT

相关的 gui 事物

你需要给scheduleAtFixedRate方法传一个TimerTask(里面有你要重复执行的代码),延迟量(任务启动前的等待时间)和周期量(每次执行之间的延迟时间):

java.util.Timer timer = new java.util.Timer();

ActionListener listener = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                //code to execute repeatedly
            }
        }, 0, 0);
};