Galera, estou tentando fazer uma tela onde terá um área para os botões e conforme eu clico nos botões vai mudando os painéis, tudo na mesma janela. Um amigo sugeriu que eu usasse o Jtabbedpane e ocultasse as guias, só que eu não estou achando essa opção, alguém pode me ajudar ? Ou sugerir alguma outra forma ?
andersongmp não sei se entendi ao certo tua dúvida, mas vamos lá.
Para você mudar entre um Jpanel e outro sem clicar lá na aba, vc pode utilizar o método:
E ai vc passa o índice JTabbedPane que você deseja exibir.
Qualquer coisa dá um grito ai.
Não dá para “ocultar as guias”. O que se faz é usar um CardLayout. Vou dar um exemplo daqui a pouco.
package guj;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.BoxLayout;
import java.awt.CardLayout;
import javax.swing.border.TitledBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class ExemploCardLayout extends JFrame {
private JPanel pnlBotoes;
private JButton btnClientes;
private JButton btnProdutos;
private JButton btnEstoque;
private JPanel pnlCards;
private JPanel pnlClientes;
private JPanel pnlProdutos;
private JPanel pnlEstoque;
private JLabel lblClientesClientesClientes;
private JTextField txtProdutosProdutosProdutos;
private JButton btnEstoqueEstoqueEstoque;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ExemploCardLayout frame = new ExemploCardLayout();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public ExemploCardLayout() {
initComponents();
}
private void initComponents() {
setTitle("ExemploCardLayout");
setBounds(100, 100, 450, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(getPnlBotoes(), BorderLayout.WEST);
getContentPane().add(getPnlCards(), BorderLayout.CENTER);
}
private JPanel getPnlBotoes() {
if (pnlBotoes == null) {
pnlBotoes = new JPanel();
pnlBotoes.setLayout(new BoxLayout(pnlBotoes, BoxLayout.Y_AXIS));
pnlBotoes.add(getBtnClientes());
pnlBotoes.add(getBtnProdutos());
pnlBotoes.add(getBtnEstoque());
}
return pnlBotoes;
}
private JButton getBtnClientes() {
if (btnClientes == null) {
btnClientes = new JButton("Clientes");
btnClientes.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
((CardLayout) getPnlCards().getLayout()).show(getPnlCards(), "Clientes");
}
});
}
return btnClientes;
}
private JButton getBtnProdutos() {
if (btnProdutos == null) {
btnProdutos = new JButton("Produtos");
btnProdutos.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
((CardLayout) getPnlCards().getLayout()).show(getPnlCards(), "Produtos");
}
});
}
return btnProdutos;
}
private JButton getBtnEstoque() {
if (btnEstoque == null) {
btnEstoque = new JButton("Estoque");
btnEstoque.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
((CardLayout) getPnlCards().getLayout()).show(getPnlCards(), "Estoque");
}
});
}
return btnEstoque;
}
private JPanel getPnlCards() {
if (pnlCards == null) {
pnlCards = new JPanel();
pnlCards.setLayout(new CardLayout(0, 0));
pnlCards.add(getPnlClientes(), "Clientes");
pnlCards.add(getPnlProdutos(), "Produtos");
pnlCards.add(getPnlEstoque(), "Estoque");
}
return pnlCards;
}
private JPanel getPnlClientes() {
if (pnlClientes == null) {
pnlClientes = new JPanel();
pnlClientes.setBorder(new TitledBorder("Clientes"));
pnlClientes.add(getLblClientesClientesClientes());
}
return pnlClientes;
}
private JPanel getPnlProdutos() {
if (pnlProdutos == null) {
pnlProdutos = new JPanel();
pnlProdutos.setBorder(new TitledBorder("Produtos"));
pnlProdutos.add(getTxtProdutosProdutosProdutos());
}
return pnlProdutos;
}
private JPanel getPnlEstoque() {
if (pnlEstoque == null) {
pnlEstoque = new JPanel();
pnlEstoque.setBorder(new TitledBorder("Estoque"));
pnlEstoque.add(getBtnEstoqueEstoqueEstoque());
}
return pnlEstoque;
}
private JLabel getLblClientesClientesClientes() {
if (lblClientesClientesClientes == null) {
lblClientesClientesClientes = new JLabel("Clientes Clientes Clientes");
}
return lblClientesClientesClientes;
}
private JTextField getTxtProdutosProdutosProdutos() {
if (txtProdutosProdutosProdutos == null) {
txtProdutosProdutosProdutos = new JTextField();
txtProdutosProdutosProdutos.setText("Produtos Produtos Produtos");
txtProdutosProdutosProdutos.setColumns(10);
}
return txtProdutosProdutosProdutos;
}
private JButton getBtnEstoqueEstoqueEstoque() {
if (btnEstoqueEstoqueEstoque == null) {
btnEstoqueEstoqueEstoque = new JButton("Estoque Estoque Estoque");
}
return btnEstoqueEstoqueEstoque;
}
}
Exemplo:
É possível ainda setar o layout do frame como null, e posicionar o Jtabbedpane por meio do método:
Dai pode ficar melhor para vocÊ posicionar outros elementos, se for o caso.
[quote=urbgames]É possível ainda setar o layout do frame como null, e posicionar o Jtabbedpane por meio do método:
Dai pode ficar melhor para vocÊ posicionar outros elementos, se for o caso.[/quote]
Fico com medo de como é que eu determino o valor de y
É que se mudar o look & feel vai ficar tudo bagunçado. Mesmo não mudando o look & feel, basta você rodar um programa com layout absoluto (null) em sistemas operacionais diferentes (onde a fonte padrão é diferente, como é o caso do Windows e do Linux) que as coisas ficam todas bagunçadas.
entanglement de fato você tem toda razão. É porque é já tentei utilizar o layout CardLayout com Jtabbedpane e outros elementos e ficaram um tanto bagunçados. Mas acompanho aqui a discussão, e espero ansiosamente também uma boa solução.
Certo. Assisti umas vídeo aulas e aprendi a fazer o CadLayout, só que fiz de outra maneira, eu criei vários painéis do mesmo tamanho, um sobreposto ao outro, e conforme clico nos botões os painéis são mostrados e ocultados, por enquanto está dando certo, tem algum problema de fazer assim ?