Desabilitar uma aba da JTabbedPane

6 respostas
V

Pessoal estou a tentar desabilitar uma aba da JTabbedPane dei uma olhada na documentação da sun e encontrei o método setEnabledAt so que acontece que ele está a retornar uma excepção, eis o cod:

public void construcaoformulario()
	{
		painel = new JPanel();
		painel.setLayout(new GridLayout(13,4,2,2));
		
		lblnome = new JLabel("Nome",lblnome.RIGHT);
		lblidade = new JLabel("Idade",lblidade.RIGHT);
		lbltelefone = new JLabel("Telefone",lblidade.RIGHT);
		lbllocalidadademorada = new JLabel("Localidade",lbllocalidadademorada.RIGHT);
		lblbairromorada = new JLabel("Bairro", lblbairromorada.RIGHT);
		lblregistocriminal = new JLabel("Registo criminal", lblregistocriminal.RIGHT);
		lblboletimsanidade = new JLabel("Boletim de sanidade", lblboletimsanidade.RIGHT);
		lblestadocivil = new JLabel("Estado civil", lblestadocivil.RIGHT);
		lblnomepai = new JLabel("Nome do pai", lblnomepai.RIGHT);
		lblocupacaopai = new JLabel("Ocupaçao", lblocupacaopai.RIGHT);	
		lblnomemae = new JLabel("Nome da mãe", lblnomemae.RIGHT);
		lblnumerocartac = new JLabel("Numero da carta de condução", lblnumerocartac.RIGHT);
		lbltipocartac = new JLabel("Tipo da carta de condução", lbltipocartac.RIGHT);
		
		txtnome = new JTextField();
		txtidade = new JTextField() ;
		txttelefone = new JTextField();
		txtlocalidadademorada = new JTextField();
		txtbairromorada = new JTextField();
		listaregistocriminal = new JComboBox(registocriminal);
		listaboletimsanidade = new JComboBox(boletimsanidade);
		listaestadocivil = new JComboBox(estadocivil);
		txtnomepai = new JTextField();
		txtocupacaopai = new JTextField();	
		txtnomemae = new JTextField();
		txtnumerocartac = new JTextField();
		listatipocartaconducao = new JComboBox(tipocartaconducao);
		
		painel.add(lblnome);
		painel.add(txtnome);
		painel.add(lblidade);
		painel.add(txtidade);
		painel.add(lbltelefone);
		painel.add(txttelefone);
		painel.add(lbllocalidadademorada);
		painel.add(txtlocalidadademorada);
		painel.add(lblbairromorada);
		painel.add(txtbairromorada);
		painel.add(lblregistocriminal);
		painel.add(listaregistocriminal);
		painel.add(lblboletimsanidade);
		painel.add(listaboletimsanidade);
		painel.add(lblestadocivil);
		painel.add(listaestadocivil);
		painel.add(lblnomepai);
		painel.add(txtnomepai);
		painel.add(lblocupacaopai);
		painel.add(txtocupacaopai);
		painel.add(lblnomemae);
		painel.add(txtnomemae);
		painel.add(lblnumerocartac);
		painel.add(txtnumerocartac);
		painel.add(lbltipocartac);
		painel.add(listatipocartaconducao);
		
		
		JTabbedPane jtp = new JTabbedPane();
		jtp.setEnabledAt( 1, false);
		//jtp.setTabPlacement(JTabbedPane.LEFT);
		jtp.addTab("Outras informações", painel);
		getContentPane().add(jtp, BorderLayout.CENTER);
}

6 Respostas

L

Veja…

Você está tentando desabilitar a aba antes mesmo de tê-la criado. Tente fazer o seguinte:

JTabbedPane jtp = new JTabbedPane();  
//jtp.setTabPlacement(JTabbedPane.LEFT);  
jtp.addTab("Outras informações", painel);  
jtp.setEnabledAt( 1, false);  
getContentPane().add(jtp, BorderLayout.CENTER);

[]'s

V

Cara tentei seguir a tua ideia e continua a dar expeção:

Exception in thread main java.lang.ArrayIndexOutOfBoundsException: 1 >= 1

at java.util.Vector.elementAt(Unknown Source)

at javax.swing.JTabbedPane.setEnabledAt(Unknown Source)

at Formulariopessoa.construcaoformulario(Formulariopessoa.java:139)

at Formulariopessoa.(Formulariopessoa.java:68)

at Formulariopessoa.main(Formulariopessoa.java:358)
T

As abas começam em zero no JTabbedPane, provavelmente seu erro é esse, você esta tentando desativar uma aba que não existe. Dessa forma coloque:

jtp.setEnabledAt( 0, false);
V

Cara a tua ideia funcionou mais acontence que tenho mais do que uma aba eu quero desabilitar a segunda aba.

T

Tenta isso:

for(int i = 0 ; i < jtp.getTabCount(); i++) jtp.setEnabledAt(i, false);

Com isso você desabilita todas as abas do seu tabbed, caso você queira desabilitar uma aba expecifica, é só passar o número dela para o setEnabledAt, lembrando sempre que a primeira aba começa em “ZERO”. Suponha que você queira desabilitar a primeira e terceira aba, ficaria assim:

jtp.setEnabledAt( 0, false); //A primeira é a aba 0.
jtp.setEnabledAt( 2, false); //A terceira é a aba 2.

Penso que isso vai te ajudar.

V

Cara continuar a dar mesma coisa, ele so desabilita mesmo o primeiro, mais como eu tenho duas abas irei trocar a ordem e desabilitar a primeira.

Criado 18 de junho de 2010
Ultima resposta 21 de jun. de 2010
Respostas 6
Participantes 3