Abrir em abas

1 resposta
R

Galera seguem anexo a imagem do meu programa . Eu queria que quando o usuário clicasse em algum item do menu a pagina abrisse nessa área demarcada, tipo um jTabbedPane. Mas acontece que só quero que aba apareça quando o usuário clicar no item do menu desejado e quero que essa aba tenha o “X” para fechar a aba. Como posso fazer isso ? Quero tipo este programa, em relação as abas, olha como ele é.

1 Resposta

P

Olá,
Primeiramente, para adicionar uma aba ao JTabbedPane ao clicar no botão:

A classe JTabbedPane contém um método chamado add(Component component) esse atributo componente será o conteúdo que deve aparecer na aba. O título da aba será o nome do componente adicionado.

Ex:
JTabbedPane pane = new JTabbedPane();
JPanel panel = new JPanel();
panel.setName("Aba 1");
pane.add(panel);

Para adicionar a aba ao clicar no botão apenas coloque o pane.add(panel) dentro de um actionListener de tal botão.
No fim redesenhe a tela, talvez seja necessário executar um revalidate();

É bem fácil fazer uma aba com o botão de fechar.

- Primeiro crie uma extensão da classe JTabbedPane.
- Agora substitua o método Component add(Component component) da super classe(JTabbedPane);

Sabe a aba na qual contém o título do componente? Bem essa que você deseja colocar um 'x', naquela aba contém um componente.
Você pode colocar outro componente no lugar usando o método setTabComponentAt(int index, Component component);

- Ou seja, você pode criar dentro do método substituído, um JPanel com FlowLayout, adicionar um JLabel(Para o Título), e um JButton(O botão 'x' que irá fechar a aba), e quando seu pequeno JPanel estiver pronto coloque ele na aba utilizando o método setTabComponentAt

Código:

public class TabPane extends JTabbedPane {

        @Override
	public Component add(final Component component) {
		super.add(component);
	        {
			final CustomButton closeButton = new CustomButton("TabBlackButton");// Criando o botão de fechar
			final JPanel tabPanel = new JPanel(); // Criando o component que será colocado na aba
			tabPanel.setLayout(new FlowLayout(2, 2, 0)); // Criando um layout no qual irá organizar os componentes alinhados horizontalmente.
			JLabel tabTitle = new JLabel(component.getName()); // Adicionando o nome do componente adicionado ao JLabel que será o título da sua aba.
			tabPanel.setOpaque(false); // Deixa o fundo do componente transparente.
			tabPanel.add(tabTitle); // Adiciona o título da aba
			tabPanel.add(closeButton); // Adiciona o botão de fechar da aba			
			setTabComponentAt(indexOfComponent(component), tabPanel); // Adiciona o componente criado à aba.
			closeButton.addActionListener(new ActionListener() { // Cria o listener do botão que fará a aba fechar ao ser clicado.
				@Override
				public void actionPerformed(ActionEvent e) {
					int closeTabNumber = indexOfComponent(component); // Pega o número da aba atual baseada no componente contido nela.
					removeTabAt(closeTabNumber); // Remove uma aba do JTabbedPane baseada no número da aba.					
				}
			});
		}
		return component;
	}

}

Espero que a partir disso você consiga, boa sorte.

Criado 15 de setembro de 2012
Ultima resposta 15 de set. de 2012
Respostas 1
Participantes 2