Olá Pessoal…,
Galera, eu to tentando aqui, já faz um tempo e ta osso… Como eu faço para ao se clicar numa coluna ou linha de um Jtable, um Jpainel ganhar foco?
Eu ja tenho um evento de mouseClicked que ao clicar na tabela, ele já leva as informações para os campos corretamente, só não consigo fazer dar foco no Jpainel.
desde obrigado galera !!
seuPanel.requestFocus();
Que tal assim?
Mas coloca uma borda no seu JPanel e, quando requisitar o focus, muda a cor da borda… Talvez fique bacana 
Opa Nicolas beleza?
valeu a dica, mas eu já havia tentado isso e não rolou… porque quando ele pesquisa exibe num Jtable que está em um painel. Quando eu clico no jtable, ele preenche os campos corretamente no outro jPainel, só que não dá foco…
ta assim:
[code] private void pesquisajTableMouseClicked(java.awt.event.MouseEvent evt) {
int linha = pesquisajTable.getSelectedRow();
numeroChamadojTextField.setText(pesquisajTable.getValueAt(linha, 0).toString());
try
{
sgtiBanco.executaSQL("select DescricaoCategoria, Loja, Pessoa, MotivoChamado, DescricaoChamado, Usuario,"
+ "HoraAbertura, HoraFechamento, DataCadastro, Finalizado from Chamados where "
+ "IdChamado = '"+numeroChamadojTextField.getText()+"';");
sgtiBanco.resultset.first();
categoriajComboBox.setSelectedItem(sgtiBanco.resultset.getString("DescricaoCategoria"));
lojajComboBox.setSelectedItem(sgtiBanco.resultset.getString("Loja"));
pessoajComboBox.setSelectedItem(sgtiBanco.resultset.getString("Pessoa"));
motivoChamadojTextField.setText(sgtiBanco.resultset.getString("MotivoChamado"));
descricaojTextArea.setText(sgtiBanco.resultset.getString("DescricaoChamado"));
userjLabel.setText(sgtiBanco.resultset.getString("Usuario"));
hora1jLabel.setText(sgtiBanco.resultset.getString("HoraAbertura"));
jLabel.setText(sgtiBanco.resultset.getString("Horafechamento"));
data1jLabel.setText(sgtiBanco.resultset.getString("DataCadastro"));
if(sgtiBanco.resultset.getString("Finalizado").equals("A"))
abertojRadioButton.setSelected(true);
else
fechadojRadioButton.setSelected(true);
}
catch (SQLException erro)
{
JOptionPane.showMessageDialog(null,"Problemas para editar \n"+erro);
}
} [/code]
[quote=akira191]Opa Nicolas beleza?
valeu a dica, mas eu já havia tentado isso e não rolou… porque quando ele pesquisa exibe num Jtable que está em um painel. Quando eu clico no jtable, ele preenche os campos corretamente no outro jPainel, só que não dá foco…
ta assim:
[code] private void pesquisajTableMouseClicked(java.awt.event.MouseEvent evt) {
int linha = pesquisajTable.getSelectedRow();
numeroChamadojTextField.setText(pesquisajTable.getValueAt(linha, 0).toString());
try
{
sgtiBanco.executaSQL("select DescricaoCategoria, Loja, Pessoa, MotivoChamado, DescricaoChamado, Usuario,"
+ "HoraAbertura, HoraFechamento, DataCadastro, Finalizado from Chamados where "
+ "IdChamado = '"+numeroChamadojTextField.getText()+"';");
sgtiBanco.resultset.first();
categoriajComboBox.setSelectedItem(sgtiBanco.resultset.getString("DescricaoCategoria"));
lojajComboBox.setSelectedItem(sgtiBanco.resultset.getString("Loja"));
pessoajComboBox.setSelectedItem(sgtiBanco.resultset.getString("Pessoa"));
motivoChamadojTextField.setText(sgtiBanco.resultset.getString("MotivoChamado"));
descricaojTextArea.setText(sgtiBanco.resultset.getString("DescricaoChamado"));
userjLabel.setText(sgtiBanco.resultset.getString("Usuario"));
hora1jLabel.setText(sgtiBanco.resultset.getString("HoraAbertura"));
jLabel.setText(sgtiBanco.resultset.getString("Horafechamento"));
data1jLabel.setText(sgtiBanco.resultset.getString("DataCadastro"));
if(sgtiBanco.resultset.getString("Finalizado").equals("A"))
abertojRadioButton.setSelected(true);
else
fechadojRadioButton.setSelected(true);
}
catch (SQLException erro)
{
JOptionPane.showMessageDialog(null,"Problemas para editar \n"+erro);
}
} [/code][/quote]
Fala, Akira!
-
Tá… Porque foco no JPanel? Não seria mais legal dar foco no primeiro campo preenchido, por exemplo, no campo de nome?
-
Você sabe programar com a arquitetura MVC? Lógicas de negócio e acesso à dados estão misturados com códigos da View, e isso não é legal. Seria interessante dividir isso em um modelo MVC!
-
Use o PreparedStatement ao invés de concatenar os parâmetros na sua query. Evita SQL Injections e elimina a necessidade de colocar aspas simples para as Strings.
-
NÃO USE DefaultTableModel! Isso gera uma série de implicações a você, uma das quais é não trabalhar diretamente com objetos!
Valeu, abraços!
Rapa, estudar o negócio e ter que fazer milagres é osso…
tenho noções, ainda sou estudante. Com calma chego la xD
mesmo assim valeu a ajuda, abraços !!
[quote=akira191]Rapa, estudar o negócio e ter que fazer milagres é osso…
tenho noções, ainda sou estudante. Com calma chego la xD
mesmo assim valeu a ajuda, abraços !![/quote]
Relaxa que o bicho não é de sete cabeças assim…
Eu também sou estudante, mas eu ralei e aprendi essas coisas, muitas aqui pelo GUJ! >.<
E você ainda não respondeu porque dar foco no Panel, ao invés de dar em um componente dele… Tipo, dar o foco no primeiro JTextField, saca?
Você pode fazer algo assim:
- Crie um modelo pra sua JTable (siga o link da minha assinatura para melhores informações!):
// Estou supondo que você criou um Bean para a entidade Chamados!
public class ChamadosTableModel extends AbstractTableModel
{
private List<Chamado> chamados = new ArrayList<Chamado>();
private static final int colunaCategoria = 0;
private static final int colunaLoja = 1;
private static final int colunaPessoa = 2;
private static final int colunaMotivoChamado = 3;
public ChamadosTableModel(List<Chamado> chamados)
{
this.chamados = chamados;
}
public String getColumnName(int column)
{
if (column == colunaCategoria) return "Categoria";
if (column == colunaLoja) return "Loja";
if (column == colunaPessoa) return "Pessoa";
if (column == colunaMotivoChamado) return "Motivo do Chamado";
return "";
}
public Class getColumnClass(int column)
{
return String.class;
}
public Object getValueAt(int row, int column)
{
Chamado chamado = chamados.get(row);
if (column == colunaCategoria) return chamado.getCategoria();
if (column == colunaLoja) return chamado.getLoja();
if (column == colunaPessoa) return chamado.getPessoa();
if (column == colunaMotivoChamado) return chamado.getMotivoChamado();
return "";
}
// Esse método busca um registro específico da tabela.
public Chamado buscarRegistro(int row)
{
return chamados.get(row);
}
}
- Coloque um Listener na sua JTable que, ao selecionar um registro, ele busque os dados daquela linha:
// Busca uma lista dos chamados que você tem no banco de dados.
List<Chamado> chamados = ChamadosDAO.buscarRegistros();
// Cria um modelo pra sua tabela Chamados.
ChamadosTableModel model = new ChamadosTableModel( chamados );
// Cria a tabela e seta o seu modelo.
JTable chamadosTable = new JTable();
chamadosTable.setModel( model );
// Adicionar um Listener para o mouse, quando clicar em um registro.
chamadosTable.addMouseListener( new MouseListener() {
public void mouseClicked(MouseEvent e)
{
if ( e.getClickCount == 1 )
{
// Busca o registro de uma linha específica.
Chamado chamado = model.buscarRegistro( chamadosTable.getSelectedRow() );
preencherDadosPanel( chamado );
}
}
});
private void preencherDadosPanel( Chamado chamado )
{
categoriaComboBox.setSelectedItem( chamado.getDescricaoCategoria() );
lojaComboBox.setSelectedItem( chamado.getLoja() );
pessoaComboBox.setSelectedItem ( chamado.getPessoa() );
// E vai preenchendo...
categoriaComboBox.requestFocus(); // Assim, o seu foco está em um componente do painel, o primeiro, pro cliente já poder mexer nele, melhorando a usabilidade do sistema!
}
Sacou mais ou menos?
poo brother coisa linda…,
Eu resolvi voltar a estudar e deixar esse negócio de lado um pouco, eu to inclusive olhando a sua assinatura também, aquele lance do jTable eh excelente.
Então descupa eu não havia dito, é porque assim: os dados estão na tabela em outro panel, que está dentro de um jTabbedPainel. Assim o que aconteceria: de um lado fica a parte do cadastro; do outro, esta tabela que lista o que já foi cadastrado anteriormente, e caso a pessoa desejar alterar algum dado, ela apenas vai dar um clique no item na tabela ( que eu ja consegui fazer preencher do outro lado ) e dar foco la.
mas valeu ae a ajuda, eu vou dar uma estudada melhor ae obrigado !!!