pessoal,
tenho uma aplicação que possui alguns componentes que precisam ser atualizados por um thread. Aqui vai o programa bem simplificado:
public class Main extends javax.swing.JFrame {
private MontanhaRussa mr;
public Main() {
initComponents();
mr = new MontanhaRussa(jTextArea, jLabel);
}
private void initComponents() {
jTextArea = new javax.swing.JTextArea();
addBt = new javax.swing.JButton();
jLabel = new javax.swing.JLabel();
//[...]
pack();
}
private void addBtActionPerformed(java.awt.event.ActionEvent evt) {
mr.start();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Main().setVisible(true);
}
});
}
private javax.swing.JButton addBt;
private javax.swing.JLabel jLabel;
private javax.swing.JTextArea jTextArea;
}
O problema é o seguinte:
Existe uma classe MontanhaRussa, que deve atualizar o jLabel e o jTextArea. Para isso, uso a classe SwingWorker para gerenciar o thread etc.. Mas como a classe MontanhaRussa está em OUTRO ARQUIVO, não há como modificar os componentes, apenas se passá-los pelo construtor. Aqui vai a classe MontanhaRussa (bem simplificado também):
import javax.swing.JTextArea;
import javax.swing.JLabel;
import javax.swing.table.TableModel;
import javax.swing.JTable;
import javax.swing.JOptionPane;
public class MontanhaRussa extends SwingWorker {
//swing
private JTable jTable;
private JTextArea jTextArea;
private JLabel jLabel; //cronometro
public MontanhaRussa(JTable jTable, JTextArea jTextArea, JLabel jLabel)
{
pessoas = new LinkedList();
this.jTable = jTable;
this.jTextArea = jTextArea;
this.jLabel = jLabel;
}
@Override
public Object construct() {
//inicializando algumas threads modificadoras
blabla.start();
return new Object();
}
}
eu gostaria de saber se há alguma outra maneira de fazer todo esse processo, pois a maneira que consegui fazer é meio orientado a gambiarra...
obrigado!