class ChecarComSwingWorker implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
final int totalRows = CadoemTabela.getModel().getRowCount();
progressBar.setMaximum(totalRows);
progressBar.setMinimum(0);
//passei parametros para facilitar o entendimento
//- o primeiro é o retorno do doInBackground(não foi necessario uso neste exemplo)
//- o segundo é o tipo do valor usado entre o publish e o process
SwingWorker<Object, Integer> worker = new SwingWorker<Object, Integer>() {
//este método é que executa em uma Thread paralela
//todo processamento pesado que deve ser executado
//fora da EDT, deve ser executado aqui
@Override
protected Object doInBackground() {
for (int i = 0; i < totalRows; i++) {
try {
Boolean status = (Boolean) CadoemTabela.getModel().getValueAt(i, 3);
status = status == null ? true : !status;
CadoemTabela.getModel().setValueAt(status, i, 3);
//este método é que atualiza a barra de progresso
//passando cada iteração para o método process
publish(i);
Thread.sleep(200);
} catch (Exception ex) {
ex.printStackTrace();
}
}
return null;
}
//este método é que recebe o que é passado no publish
//e atualiza a barra de progresso na EDT
@Override
protected void process(List<Integer> chunks) {
int valueRecent = chunks.get(chunks.size() - 1);
progressBar.setValue(valueRecent + 1);
}
//só é executado quando o doInBackground termina
//o processamento
@Override
protected void done() {
progressBar.setValue(0);
}
};
worker.execute();
}
}
`
jButton2.addActionListener();new ChecarComSwingWorker()
`
Pessoal, estou usando essa barra de progresso que ao apertar o botão, ele vai marcando uma coluna definida como checkbox na jtable, e ao mesmo tempo preenchendo a barra de progresso.Tudo funciona normal, mas o problema é que eu gostaria de chamar esse evento no meu jbutton da GUI ao clicar e também fazer com q ele respeite a permissão de se deseja salvar ou não. Ao tentar fazer deu certo, mas ele não aguarda finalizar o processo de preencher os checkbox e logo ja finaliza o processo. Segue meu botão:
private void cadOEMSalvarActionPerformed(java.awt.event.ActionEvent evt) {
if (CadoemOEM.getText().isEmpty()) {
JOptionPane.showMessageDialog(null, "O campo 'Oem' é obrigatório!", "", JOptionPane.WARNING_MESSAGE);
CadoemOEM.requestFocus();
} else {
int p = JOptionPane.showConfirmDialog(null, "Você deseja realmente salvar?", "Salvar", JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, new ImageIcon(this.getClass().getResource("/images/save.png")));
if (p == 0) {
cadOEMSalvar.addActionListener(new ChecarComSwingWorker());
try {
Class.forName(Auxiliar.AcessoBanco.getDriver());
Connection con = DriverManager.getConnection(Auxiliar.AcessoBanco.getUrl(), Auxiliar.AcessoBanco.getUser(), Auxiliar.AcessoBanco.getPass());
String sql = "insert into Cad_Oem"
+ "(OEM)"
+ "values(?)";
PreparedStatement pst = con.prepareStatement(sql);
pst.setString(1, CadoemOEM.getText());
pst.executeUpdate();
JOptionPane.showMessageDialog(null, "Salvo com sucesso!");
painel tela = new painel();
PreencherTabela();
CadoemOEM.setText(null);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Essa OEM já foi cadastrada!");
}
}
}
}