Colocar ação em um jCheckBox

Senhores,

           Boa tarde! Seguinte, estou desenvolvendo um programa simples em java, porém estou com uma certa dificuldade. O que ocorre é o seguinte, o programa terá 2 jCheckBox, sendo que um ao ser marcado, deve realizar a simulação de um loop de cliques de uma tecla (por exemplo o Enter) até que seja desmarcado o jCheckBox.

O problema é que não to conseguindo adcionar esta ação no jCheckBox, então, é possível ??? Podem me audar ???

Muito obrigado, desde já!

O que você já tem até então? Já tem a lógica dos Listeners pronta ou ainda nada?

Eu tenho a view pronta, além disso, tenho o listener feito, porém não to sabendo como adcionar a funcionalidade de simulação dos cliques…:

jCheckBox1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jCheckBox1ActionPerformed(evt);
}

    private void jCheckBox1ActionPerformed(ActionEvent evt) {
                jCheckBox2.setSelected(false);
                }
        });

Bom… Consegui fazer o programinha simular as teclas que eu queria quando o checkbox fosse marcado, porém, agora estou com o seguinte problema, eu marco o checkbox, e o programa “trava”, não da nem pra ver o checkbox marcado, porém ele continua executando as ações.

Já tentei colocar até 15 segundos de delay mas não adiantou, aí, quando ocorre isso, não consigo desmarcar o checkbox pro programa para, nem marcar outra opção qualquer…

Alguém pode me ajudar com isso ?

Código utilizado para as ações:

private void jCheckBox1ActionPerformed(ActionEvent evt) throws AWTException, IOException, InterruptedException {
                jCheckBox2.setSelected(false);
                Robot robot = new Robot();
                while (jCheckBox1.isSelected()) {
                    robot.delay(500);
                    robot.keyPress(master1);
                    robot.delay(500);
                    robot.keyPress(master2);
                    robot.delay(500);
                    robot.keyPress(teste);
                }
                
            }

Simulações:

    public int master1 = KeyEvent.VK_F5;
    public int master2 = KeyEvent.VK_ENTER;
    public int nmaster = KeyEvent.VK_ENTER;
    public int teste = KeyEvent.VK_M;

A resposta é Threads. Ou o Thread principal do Swing repinta a janela, ou fica pressionando as teclas. Você terá que criar um novo Thread para ser seu “Robô”.

Cara, vo postar aqui todo o código da view pra ver se você ou outra pessoa pode me ajudar…

View:

/*
 * AutoStartView.java
 */
package autostart;

import java.awt.AWTException;
import java.awt.Robot;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdesktop.application.Action;
import org.jdesktop.application.SingleFrameApplication;
import org.jdesktop.application.FrameView;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.swing.JDialog;
import javax.swing.JFrame;

/**
 * Frame principal.
 */
public class AutoStartView extends FrameView {

    /**
     *
     * @param app
     */
    public AutoStartView(SingleFrameApplication app) {
        super(app);
        initComponents();
        robos();


    }

 /**
 * Caixa do Sobre.
 */
    @Action
    public void showAboutBox() {
        if (aboutBox == null) {
            JFrame mainFrame = AutoStartApp.getApplication().getMainFrame();
            aboutBox = new AutoStartAboutBox(mainFrame);
            aboutBox.setLocationRelativeTo(mainFrame);
            mainFrame.setResizable(false);
        }
        AutoStartApp.getApplication().show(aboutBox);
    }

 /**
 * Robos.
 */
    public void robos() {

        jCheckBox1.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                try {
                    try {
                        jCheckBox1ActionPerformed(evt);
                    } catch (InterruptedException ex) {
                        Logger.getLogger(AutoStartView.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } catch (AWTException ex) {
                    Logger.getLogger(AutoStartView.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(AutoStartView.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

            private void jCheckBox1ActionPerformed(ActionEvent evt) throws AWTException, IOException, InterruptedException {
                jCheckBox2.setSelected(false);
                Robot robot = new Robot();
                while (jCheckBox1.isSelected()) {
                    robot.delay(5000);
                    robot.keyPress(master1);
                    robot.delay(5000);
                    robot.keyPress(master2);
                    robot.delay(5000);
                    robot.keyPress(teste);
                }

            }
        });
        jCheckBox2.addActionListener(new java.awt.event.ActionListener() {

            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jCheckBox2ActionPerformed(evt);
            }

            private void jCheckBox2ActionPerformed(ActionEvent evt) {
                jCheckBox1.setSelected(false);
                        }
        });
    }

    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        menuBar = new javax.swing.JMenuBar();
        javax.swing.JMenu fileMenu = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        javax.swing.JMenuItem exitMenuItem = new javax.swing.JMenuItem();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jCheckBox1 = new javax.swing.JCheckBox();
        jCheckBox2 = new javax.swing.JCheckBox();

        menuBar.setName("menuBar"); // NOI18N

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(autostart.AutoStartApp.class).getContext().getResourceMap(AutoStartView.class);
        fileMenu.setText(resourceMap.getString("fileMenu.text")); // NOI18N
        fileMenu.setName("fileMenu"); // NOI18N

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(autostart.AutoStartApp.class).getContext().getActionMap(AutoStartView.class, this);
        jMenuItem1.setAction(actionMap.get("showAboutBox")); // NOI18N
        jMenuItem1.setText(resourceMap.getString("jMenuItem1.text")); // NOI18N
        jMenuItem1.setName("jMenuItem1"); // NOI18N
        fileMenu.add(jMenuItem1);
        jMenuItem1.getAccessibleContext().setAccessibleDescription(resourceMap.getString("jMenuItem1.AccessibleContext.accessibleDescription")); // NOI18N

        exitMenuItem.setAction(actionMap.get("quit")); // NOI18N
        exitMenuItem.setText(resourceMap.getString("exitMenuItem.text")); // NOI18N
        exitMenuItem.setName("exitMenuItem"); // NOI18N
        fileMenu.add(exitMenuItem);

        menuBar.add(fileMenu);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, resourceMap.getString("jPanel1.border.title"), javax.swing.border.TitledBorder.RIGHT, javax.swing.border.TitledBorder.BOTTOM)); // NOI18N
        jPanel1.setName("jPanel1"); // NOI18N

        jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
        jLabel1.setName("jLabel1"); // NOI18N

        jButton1.setAction(actionMap.get("showAboutBox")); // NOI18N
        jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N
        jButton1.setName("jButton1"); // NOI18N

        jButton2.setAction(actionMap.get("quit")); // NOI18N
        jButton2.setText(resourceMap.getString("jButton2.text")); // NOI18N
        jButton2.setBorderPainted(false);
        jButton2.setName("jButton2"); // NOI18N

        jCheckBox1.setText(resourceMap.getString("jCheckBox1.text")); // NOI18N
        jCheckBox1.setName("jCheckBox1"); // NOI18N

        jCheckBox2.setText(resourceMap.getString("jCheckBox2.text")); // NOI18N
        jCheckBox2.setName("jCheckBox2"); // NOI18N

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jCheckBox1)
                            .addComponent(jCheckBox2))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(70, 70, 70)
                        .addComponent(jLabel1)))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(6, 6, 6)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(jCheckBox1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton2)
                    .addComponent(jCheckBox2))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        setComponent(jPanel1);
    }// </editor-fold>                        

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JCheckBox jCheckBox1;
    private javax.swing.JCheckBox jCheckBox2;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JMenuBar menuBar;
    // End of variables declaration                   
    private JDialog aboutBox;
    private int master1 = KeyEvent.VK_F5;
    private int master2 = KeyEvent.VK_ENTER;
    private int nmaster = KeyEvent.VK_ENTER;
    private int teste = KeyEvent.VK_M;
}

Solucionado…
Fiz com Threads… Valeu pela ajuda!