Pessoal,
Estou tentando fazer um sistema de busca onde existe um JInternalFrame com 3 panels nele. O NORTH é os campos de busca, o CENTER são é o botão de Procurar e o SOUTH é o resultado da busca.
O botão Procurar starta o actionPerformed fora da classe do JInternalFrame e chama uma outra classe q se encarrega de procurar no banco e retornar um JScrollPane contendo os dados.
Só que não aparece o resultado da busca. Alguém pode me ajudar? Eis o código:
Classe ProcFuncionario.java
public class ProcFuncionario extends JInternalFrame implements ActionListener {
private static final long serialVersionUID = -1237537304008263064L;
private JLabel lblNome;
private JTextField txtNome;
private JLabel lblRG;
private JTextField txtRG;
private JLabel lblCPF;
private JTextField txtCPF;
private JButton bProcurar;
private JPanel resultadoProcura;
private JPanel botoes;
private JPanel form;
public ProcFuncionario(){
super("Procurar Funcionário",true,true,true,true);
this.setSize(500, 150);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.getContentPane().setLayout(new BorderLayout());
lblNome = new JLabel("Nome");
txtNome = new JTextField("");
lblRG = new JLabel("RG");
txtRG = new JTextField("");
lblCPF = new JLabel("CPF");
txtCPF = new JTextField("");
bProcurar = new JButton("Procurar");
bProcurar.addActionListener(this);
form = new JPanel(new GridLayout(3, 2));
txtNome.requestFocus();//mantem o focus no nome
form.add(lblNome);
form.add(txtNome);
form.add(lblRG);
form.add(txtRG);
form.add(lblCPF);
form.add(txtCPF);
botoes = new JPanel(new FlowLayout());
botoes.add(bProcurar);
resultadoProcura = new JPanel(new FlowLayout());
this.getContentPane().add(form, BorderLayout.NORTH);
this.getContentPane().add(botoes, BorderLayout.CENTER);
this.getContentPane().add(resultadoProcura, BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e){
if (e.getActionCommand().equals("Procurar")) {
resultadoProcura.add(
FuncionarioSQL.Procurar(txtNome.getText(),
txtRG.getText(),
txtCPF.getText()
)
);
this.getContentPane().add(resultadoProcura, BorderLayout.SOUTH);
JOptionPane.showMessageDialog(this, "OK");
} else {
JOptionPane.showMessageDialog(this, "Cancelar");
}
}
}
Classe que é chamada pelo ProcFuncionario e que retorna o JScrollPane com os resultados:
public class FuncionarioSQL {
static final String JDBC_DRIVER = "org.hsqldb.jdbcDriver";
static final String DATABASE_URL = "jdbc:hsqldb:file:/caminho_do_banco/banco";
static final String USERNAME= "sa";
static final String PASSWORD= "";
public static JScrollPane Procurar(String nome,
String RG,
String CPF
){
final String DEFAULT_QUERY = "SELECT * FROM funcionario";
ResultSetTableModel tableModel = null;
JTable resultTable = null;
try {
tableModel = new ResultSetTableModel( JDBC_DRIVER, DATABASE_URL,USERNAME, PASSWORD, DEFAULT_QUERY );
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
resultTable = new JTable( tableModel );
JScrollPane scrollPane = new JScrollPane();
scrollPane.setMaximumSize(new Dimension(640, 390));
scrollPane.setPreferredSize(new Dimension(640, 390));
scrollPane.getViewport().add( resultTable );
//resultadoProcura.add( scrollPane);
return scrollPane;
}
}
Pelo q eu percebi, ele até faz a consulta no banco e retorna o JScrollPane com os resultados, mas ele não consegue na volta adicionar ao this.getContentPane().add do metódo actionPerformed… o resultado. Alguém sabe pq?