JTable

8 respostas
ken420

Boa noite, pessoal meu problema eh o seguinte eu tenhu uma jtable que exibe nomes, o focus aponta para minha jtable eu seleciono o ultimo registro que esta registrado em meu banco de dados, como faço para apenas quando estiver no ultimo registro e eu apertar o TAB ele perder o focus da jtable e ir para meu jtextfield, sei que e preciso usar evento para capturar tecla do teclado nesse caso ja tenho feito

public void keyPressed(KeyEvent e) {
            switch(e.getKeyCode()){
                    case KeyEvent.VK_TAB:
                        //...
                          tf_pesquisarN.requestFocus();
                        break;

mas nao sei como fazer minha JTable perder o focus apenas quando estiver no ultimo registro da minha tabela :L vlw pessoal

8 Respostas

ken420

ou entao se algueim tiver um metodo de uma acao do JTable perder o focu e a jtextfield ganhar o focu

Matheus_Leandro_Ferr

Olá,

Criei um método para modificar o evento da tecla TAB para uma JTable..
você pode utiliza-lo.

Take a look:

InputMap
im			=	suatabela.getInputMap(suatabela.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);   
		  
KeyStroke 
lo_key_tab		=	KeyStroke.getKeyStroke("TAB");   
	        
im.put(lo_key_tab, im.get(KeyStroke.getKeyStroke(KeyEvent.VK_GREATER, 0)));  
	        
Action
tabAction		=	new AbstractAction()
{	
       	public
       	void			actionPerformed
       				(
       					ActionEvent		e
       				)
       	{
       		//
		// Se for a ultima linha selecionada
		//

		//
		// Requista o focu no botão.
		//
		button.requestFocus();
       	}
}; 
suatabela.getActionMap().put(im.get(lo_key_tab), tabAction);
ken420

ken420

cara veja como consigui compila esse codigo

public void tab()
    {
    InputMap
    im          =   tb_cliente.getInputMap(tb_cliente.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);

    KeyStroke
    lo_key_tab      =   KeyStroke.getKeyStroke("TAB");

    im.put(lo_key_tab, im.get(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0)));

    AbstractAction
    tabAction       =   new AbstractAction()
    {
            public
            void            actionPerformed
                        (
                            ActionEvent     e
                        )
            {
                //
            // Se for a ultima linha selecionada
            //

            //
            // Requista o focu no botão.
            //
            tf_pesquisarN.requestFocus();
            }
    };
    tb_cliente.getActionMap().put(im.get(lo_key_tab), tabAction);
    }
  1. É isso mesmo que preciso? pq veja bem meu problema quando abre minha tela e aperto TAB ele vai procurando os focus ate ai tudo bem
    mas quando ele foca a JTable se eu apertar tab ele vai pulando de linha mas n sai o focus NUNCA da JTable entendeu?

  2. Consegui compila o codigo acima mas aonde invoco o metodo tab() ?

Matheus_Leandro_Ferr

Exatamente isso.

Logo após a criação de sua tabela você chama ele.

dentro de actionPerformed, você implementa sua codificação, ou simplesmente chama focu para outro botão.
Quando você for apertar o TAB em sua JTable, ele já vai fazer automaticamente o que você determinou.

Pode confiar. :stuck_out_tongue:

samea

Oi pessoal estou com uma duvida a respeito de JTable, e gostaria de saber se vcs podem me ajudar eu tenho uma JTable que recebe os valores do banco de dados, bom ate ai tudo bem o problema eh que eu coloquei um fundo na minha aplicacao eu queria deixar a tabela transaparente para que esse fundo aprarece no espaco em branco da tabela tambem alguem ai sabe me dizer como que eu posso fazer isso?
Eu ja tentei setOpaque, table.setSelectionMode(Color.TRANSLUCENT);, e muito mais, mas nada deixou a minha tabela transparente por favor alguem me ajude! :cry:

onyaszimba

samea:
Oi pessoal estou com uma duvida a respeito de JTable, e gostaria de saber se vcs podem me ajudar eu tenho uma JTable que recebe os valores do banco de dados, bom ate ai tudo bem o problema eh que eu coloquei um fundo na minha aplicacao eu queria deixar a tabela transaparente para que esse fundo aprarece no espaco em branco da tabela tambem alguem ai sabe me dizer como que eu posso fazer isso?
Eu ja tentei setOpaque, table.setSelectionMode(Color.TRANSLUCENT);, e muito mais, mas nada deixou a minha tabela transparente por favor alguem me ajude! :cry:

Samea, o método para fazer isso é realmente o setOpaque(). Mas não adianta usar direto na table. As células que formam a tabela são, na verdade, JLabels que são implementadas pelo TableCellRenderer.

Eu tentei fazer o mesmo e consegui, mas tive que criar mais duas classes.

O código que o Luiz Gustavo publica num tópico aqui no guj me ajudou bastante. Dá uma olhadinha: http://www.guj.com.br/posts/list/30793.java#165564

onyaszimba

Eu criei uma classe que extende o DefaultTableCellRenderer e implementei o método getTableCellRendererComponent(). Ali eu mexi nas propriedades do JLabel usado para ele poder ou não receber o setOpaque():

public class NewTableCellRenderer extends DefaultTableCellRenderer {

private boolean tranparente = false;

    public NewTableCellRenderer() {
        super();
    } // Fim do construtor

    public void setTranparencia(boolean tranparente) {
        this.tranparente = tranparente;
    }

    public Component getTableCellRendererComponent(JTable tabela,
            Object valor, boolean estaSelecionado, boolean temFoco, 
            int linha, int coluna) {
        
        JLabel label = (JLabel) super.getTableCellRendererComponent(
                tabela, valor, estaSelecionado, temFoco, linha, coluna);
        
        // Exibe o fundo da tabela ou o do próprio label
        label.setOpaque(!this.tranparente);
        
        // Centraliza o label
        if (coluna != 0)
            label.setHorizontalAlignment(JLabel.CENTER);

        return label; // Retorna o label formatado
        
    } // Fim do método getTableCellRendererComponent

} // Fim da classe NewTableCellRenderer

Agora estou tentado criar um JLabel diferente (com cantos arredondados) para colocar nesse modelo. Só não sei como eu mantenho o fundo transparente do JLabel, pois quando eu sobrescrevo o método paintComponent() ele perde esta propriedade. Se alguém puder me ajudar eu fico grato.

Criado 4 de fevereiro de 2009
Ultima resposta 12 de fev. de 2009
Respostas 8
Participantes 4