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!