Olá galera,
sou iniciante na interface gráfica Swing e estou querendo popular meus campos com os dados a partir do item selecionado no JTable.
Eu tenho esta classe para montar o jtable:
public class FuncionarioTableModel extends AbstractTableModel {
private List<Funcionario> funcionarios;
private List<String> colunas;
@SuppressWarnings("unused")
private FuncionarioDAO dao;
public FuncionarioTableModel(FuncionarioDAO dao) {
this.dao = dao;
this.funcionarios = dao.retornaTodos();
colunas = Arrays.asList("Nome", "Idade");
}
@Override
public int getColumnCount() {
return colunas.size();
}
@Override
public int getRowCount() {
return funcionarios.size();
}
@Override
public Object getValueAt(int r, int c) {
Funcionario funcionario = funcionarios.get(r);
switch (c) {
case 0:
return funcionario.getNome();
case 1:
return funcionario.getIdade();
}
return null;
}
public String getColumnName(int i) {
return colunas.get(i);
}
}
e este é meu painel que contém o jtable:
public class PainelFuncionario extends JPanel implements ActionListener {
//Componentes do painel
JLabel lbNome, lbSexo, lbIdade, lbTelefone, lbNacionalidade;
JTextField tfNome, tfIdade, tfNacionalidade, tfTelefone;
MaskFormatter maskTelefone;
@SuppressWarnings("rawtypes")
JComboBox cbSexo;
JButton btnCadastrar, btnExcluir, btnAlterar;
ImageIcon iconeCheck = new ImageIcon("imagens/check.png");
ImageIcon iconeCancel = new ImageIcon("imagens/cancel.png");
ImageIcon iconeUpdate = new ImageIcon("imagens/update.png");
// Implementacao do JTable
FuncionarioDAO funcionarioDAO = new FuncionarioDAO();
FuncionarioTableModel modeloFuncionario = new FuncionarioTableModel(
funcionarioDAO);
JTable tabelaFuncionario = new JTable(modeloFuncionario);
@SuppressWarnings({ "rawtypes", "unchecked" })
public PainelFuncionario() {
this.setSize(800, 600);
this.setLayout(null);
this.setBackground(Color.LIGHT_GRAY);
lbNome = new JLabel("Nome: ");
lbNome.setBounds(10, 50, 50, 20);
lbNome.setVisible(true);
this.add(lbNome);
tfNome = new JTextField();
tfNome.setBounds(80, 50, 180, 20);
tfNome.setVisible(true);
this.add(tfNome);
lbSexo = new JLabel("Sexo: ");
lbSexo.setBounds(10, 80, 180, 20);
lbSexo.setVisible(true);
this.add(lbSexo);
cbSexo = new JComboBox();
cbSexo.setBounds(80, 80, 100, 20);
cbSexo.setVisible(true);
this.add(cbSexo);
cbSexo.addItem("");
cbSexo.addItem("Masculino");
cbSexo.addItem("Feminino");
lbIdade = new JLabel("Idade: ");
lbIdade.setBounds(10, 110, 180, 20);
lbIdade.setVisible(true);
this.add(lbIdade);
tfIdade = new JTextField();
tfIdade.setBounds(80, 110, 100, 20);
tfIdade.setVisible(true);
this.add(tfIdade);
lbTelefone = new JLabel("Telefone: ");
lbTelefone.setBounds(300, 50, 180, 20);
lbTelefone.setVisible(true);
this.add(lbTelefone);
// adiciona mascara para o campo 'telefone'
try {
maskTelefone = new MaskFormatter("(##)####-####");
} catch (ParseException e) {
e.printStackTrace();
}
tfTelefone = new JFormattedTextField(maskTelefone);
tfTelefone.setBounds(380, 50, 140, 20);
tfTelefone.setVisible(true);
this.add(tfTelefone);
lbNacionalidade = new JLabel("Nacionalidade: ");
lbNacionalidade.setBounds(260, 80, 180, 20);
lbNacionalidade.setVisible(true);
this.add(lbNacionalidade);
tfNacionalidade = new JTextField();
tfNacionalidade.setBounds(380, 80, 140, 20);
tfNacionalidade.setVisible(true);
this.add(tfNacionalidade);
// configuracao do JTable
this.add(tabelaFuncionario);
tabelaFuncionario.setBounds(10, 200, 400, 100);
tabelaFuncionario.setVisible(true);
btnCadastrar = new JButton("Cadastrar");
btnCadastrar.setBounds(10, 350, 140, 20);
btnCadastrar.setIcon(iconeCheck);
btnCadastrar.setVisible(true);
this.add(btnCadastrar);
btnCadastrar.addActionListener(this);
btnAlterar = new JButton("Alterar");
btnAlterar.setBounds(160, 350, 140, 20);
btnAlterar.setIcon(iconeUpdate);
btnAlterar.setVisible(true);
this.add(btnAlterar);
btnAlterar.addActionListener(this);
btnExcluir = new JButton("Excluir");
btnExcluir.setBounds(310, 350, 140, 20);
btnExcluir.setIcon(iconeCancel);
btnExcluir.setVisible(true);
this.add(btnExcluir);
btnExcluir.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource().equals(btnCadastrar)) {
Funcionario funcionario = new Funcionario();
funcionario.setNome(tfNome.getText());
funcionario.setIdade(Integer.parseInt(tfIdade.getText()));
funcionario.setNacionalidade(tfNacionalidade.getText());
funcionario.setSexo(cbSexo.getSelectedItem().toString());
funcionario.setTelefone(tfTelefone.getText());
funcionarioDAO.insere(funcionario);
System.out.println("Cadastrado!");
} else if (event.getSource().equals(btnExcluir)) {
System.out.println("Limpo!");
}
}
}
Só preciso de ajuda nisto, a lógica para implementar a ação de selecionar uma linha no jtable e popular os jtextfield.
Alguém aí pode me ajudar?
:?:
Obrigado!