Java chekbox上的事件

Java chekbox上的事件,java,swing,checkbox,Java,Swing,Checkbox,我正在swing中开发一个Java接口编码,我使用了一个复选框。 我希望当我点击复选框时,它会产生一个连续的事件(因为在这个事件中,我会产生一个纬线,并将其发送给微控制器),但我不知道怎么做。 我试图制作一个ActionListener,但它只执行了一次操作 谁能帮我 以下是我尝试的代码: checkbox.addActionListener(new ActionListener() { public void actionPerformed(ActionEven

我正在
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

            }); 

(很抱歉我的英语不好,我是一名法国学生……:/)

我建议您使用
计时器
并在选中
复选框时重复您想要的代码

 Timer timer = new Timer(1000, new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    //do your stuff here
                }
            });
            timer.start();

无论如何,您不应该在EDT上做那么多与gui无关的工作

创建一个新的
java.util.Timer
并在
actionPerformed
方法中调用
Timer\scheduleAtFixedRate
不要使用
javax.swing.Timer
,因为它在EDT上执行,而且在
actionPerformed
方法中似乎要处理很多与gui无关的事情。相反,使用
EventQueue.invokeLater
发布与EDT相关的gui内容

您需要传递
scheduleAtFixedRate
方法a
TimerTask
(其中包含要重复执行的代码)、延迟量(启动任务前的等待时间)和周期量(每次执行之间的延迟时间):


“连续事件”你想要什么?事件中的循环或事件链?选中复选框时,我希望事件中的操作“重复”您的意思是,是否希望事件处理程序中的操作在整个持续时间内重复选中复选框?是的,这是我想做的谢谢你,但我不明白我必须在复选框中包含操作的位置…:(@GaelDoManh我不知道你的意思。你知道如何将侦听器添加到复选框中吗?你在向我们展示的代码中这样做
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);
};