[RESOLVIDO]Atualizar botões Swing

12 respostas
hr.mateus01

TENHO UMA FRAME QUE OS BOTÕES COMEÇAM DESABILITADOS, QUANDO EU CLICO NA TABELA HABILITA OS BOTÕES E FAZ AS AÇÕES NECESSARIAS,
SÓ QUE O PROBLEMA É QUE OS BOTÕES NÃO SE DESABILITAM DE NOVO, ALGUEM PODE DAR UMA AJUDA !?

Obg.

12 Respostas

lina

Oi,

Tá. E por acaso você desabilitou eles novamente?

Tchauzin!

hr.mateus01

Sim Sim, Vê ai

if (jTBSistema.getSelectedRow() == -1) { jBEditar.setEnabled(false); jBDeletar.setEnabled(false); jBMenu.setEnabled(false); } else { jBEditar.setEnabled(true); jBDeletar.setEnabled(true); jBMenu.setEnabled(true); }

O

Olá hr_mateus,
não vi todo o código (vc postou apenas um trecho do método?), mas pelo que eu entendi vc quer que o botao fique habilitado ou desabilitado se houver seleção de um row(imagino que se trate entao de uma jtable?).
não sei se vc já fez isso, mas para fazer isso eu coloco um ActionListener no componente que contém a linha que pode ser selecionada e nele coloco o código.

hr.mateus01

SIM

SIM

Como vc faria, eu fiz do jeito que eu falei e ele só verifica uma vez :?

lina

Oi,

O resultado do jTBSistema.getSelectedRow() nunca é -1 (pelo menos neste teu caso).

Tchauzin!

hr.mateus01

Lina
quando não tem uma linha selecionada o valor é -1. quando tem uma linha selecionada o valor começa de 0 atée acabar sua tabela !
ou seja : quando não tem linha selecionada o valor é -1 e os botões estao desabilitados
quando tem linha selecionada o valor é 0++ e os botões estao habilitados,

o pró é que só faz uma vez :?

O
Olá, então, vc precisa colocar um listener na sua jtable. Vamos ver se consigo te ajuda. penso que há várias formas de fazer isso, por exemplo:
JTable tableT = new JTable();

tableT.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
	
	public void valueChanged(ListSelectionEvent e) {
		 ListSelectionModel lsm = (ListSelectionModel)e.getSource();  
		 
		         
		 if (lsm.isSelectionEmpty()) {              
			 //codigo, aqui        
			 } else 
			 {         
				 // codigo aqui.                 
				 }
		
	}
});
esse exemplo vem do site da Oracle, que recomendo que dê uma lida, pois traz um monte de coisas. eu aprendi muito lá. [url]http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/uiswing/examples/events/TableListSelectionDemoProject/src/events/TableListSelectionDemo.java [/url] [url]http://docs.oracle.com/javase/tutorial/uiswing/events/listselectionlistener.html[/url] Acho que é possível fazer de outra forma, acrescentando o listener a tableModel, ou seja precisamente aos dados, se vc utilizar um modo de seleção de campos que inclua um checkbox, por exemplo(suponhamos que a primeira coluna do seu jtable é um checkbox e quando a pessoa seleciona, o checamos o check da linha correspondente).
tableT.getModel().addTableModelListener(new TableModelListener() {
			
			public void tableChanged(TableModelEvent e) {
				// TODO Auto-generated method stub
				
			}
		});
o principal é que vc adicione um listener. Por favor, se estiver errada, me corrijam, o listener é o padrão observer. Se vc não conhece dá uma lida sobre ele. Em java, o listener já faz parte da api, vc só precisa implementar. mais um site pra vc pesquisar sobre jtable: [url]http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#selection[/url]
hr.mateus01

1 pergunta ,
é no codigo da tabela ??
porque se for não funfa.

fiz uma solição só que ela não é bem aceita

criei o msm metodo citado e chamo ele em varias partes do projeto.
gostaria de saber um mais produtivo e menos repetitivo.

ViniGodoy

Por favor, ao postar tópicos, NÃO ABUSE DAS LETRAS MAIÚSCULAS.
Além de difíceis de ler, são considerada falta de etiqueta.

O
Olá , poste o seu código, mas coloque o método todo e a classe aonde vc está chamando o método. o que te passei antes é a implementação sugerida pela Oracle, já que não tenho idéia de como está o seu código. Dá uma lida nos links que te enviei, pois se vc entender o conceito por trás pode fazer muitas coisas e descobrir outras formas de implementar. Outro dia fiz uma jtable e usei o mouseListener. O método a seguir foi colocado na minha classe MinhaJTable que estende a classe JTable.
private void adicionarListeners() {
		this.addMouseListener(new MouseListener() {
			
			public void mouseReleased(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
			public void mousePressed(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
			public void mouseExited(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
			public void mouseEntered(MouseEvent arg0) {
				// TODO Auto-generated method stub
				
			}
			
			public void mouseClicked(MouseEvent arg0) {
				int linha = getSelectedRow();
				//coloca seu código aqui como eu coloquei o meu
				if(isElementoSelecionado && linha!=getLinhaSelecionada())
				{
					getMinhaTableModel().desclickElemento(getLinhaSelecionada());
					setLinhaSelecionada(linha);
					getMinhaTableModel().selecionouElemento(linha);
				}
				else
				{
					setLinhaSelecionada(linha);
					getMinhaTableModel().selecionouElemento(linha);
					setElementoSelecionado(true);
				}
				
			}
		});
só que para fazer isso, eu criei uma tableModel, não usei a default do jtable e nela implementei esse métodos, de selecionar itens clicando no mouse. boa sorte
O

hr.mateus01:
1 pergunta ,
é no codigo da tabela ??

sim, é o código aonde a tabela é implementada. Vc adiciona um listener a tabela. Eu crio ela separadamente com listeners e tudo, e apenas chamo no jscroolpanel o construtor da minha nova classe que estende uma jtable. Nela, coloco todos os listeners que são adicionados assim que ela é construída.

hr.mateus01:

criei o msm metodo citado e chamo ele em varias partes do projeto.
gostaria de saber um mais produtivo e menos repetitivo.

por isso vc usa o listener. leia sobre o padrao de projetos (design pattern) chamado observer. Em java, vc o implementa através dos listeners - vc só escolhe o que vc vai “escutar” se são clicks do mouse, se são mudanças na tela, se é digitação do teclado…
insisto: olhe os sites que te indiquei

hr.mateus01

Segui as instrunçoes dos links enviados e deu certo Obg.

:smiley:

Criado 10 de outubro de 2012
Ultima resposta 16 de out. de 2012
Respostas 12
Participantes 4