Tenho que fazer um trabalho da faculdade para cadastrar algumas besteiras,
ja tenho o menu pronto mas não estou conseguindo abrir outro Panel quando aperto algum botao do menu.Ja peguei o evento do botao so não deu certo mostrar o novo Panel ou Frame sei la…valeu
Eu não sei se vc já ouviu falar, mas outra maneira é vc colocar um JDesktopPane no ContentPane do JFrame, e adicionar as outras janelas ao desktop, usando o JInternalFrame.
Valeu galera, agora vou partir para o resto da classe de negocio, se o programa ficar bom eu coloco os fontes para a galera que ta iniciando essa aventura pelo java desktop!!!
Cara amigo
Na sua janela principal use Jframe e as outras use JDialog
na Frame principal use (no evendo do botão)
SuaJdialog dialog = new SuaJdialog(SeuFrame.this,true);
Na sua JDialog
setVisible(true);
Aki no meu funciona assim!!!
Deixa eu ver se eu entendi: você quer que, ao clicar de um botão, uma parte da sua janela mostre outra coisa - outro painel com os seus próprios componentes, não é isso?
Se for, eu tenho o que você precisa! E você também!
Senão vejamos: você tem um painel dentro do seu JFrame (sua janela) que deverá mudar ao clicar de um botão.
Bem, depois de você implementar a interface ActionListener e usar o método .addActionListener(<objeto>) nesse seu botão, você deve voltar as suas atenções para o painel que deverá mudar com o clique nele.
O segredo está no gerenciador de layout desse painel (o bicho que define como os componentes vão se organizar no espaço que ele ocupará na janela). Pegue esse painel e use o método:
painelMãe.setLayout(new CardLayout());
CardLayout é uma classe que trata de fazer com que um só painel exiba no mesmo espaço o conteúdo de vários outros painéis, como um baralho de cartas cuja carta da frente vai mudando conforme a vontade de alguém.
Assim, os painéis que você quer exibir naquele espaço devem ser adicionados a esse painelMãe (o nome é por minha conta) pelo método .add(), mas com uma diferença: depois de colocar o painel a ser adicionado, você deve colocar uma String que o identifique.
painelMãe.add(painelQualquer,"nomeQualquer");
painelMãe.add(outroPainel,"OutroNome");
// etc.
Isso será útil quando você for chamar o painel adicionado. Note que o primeiro painel a aparecer quando a janela for ativada será o painelUm, pois ele foi adicionado primeiro.
No método actionPerformed(), “onde as mágicas se realizam”, você deve criar um objeto da classe CardLayout dessa maneira:
public void actionPerformed(ActionEvent e){
CardLayout card= (CardLayout) painelMãe.getLayout();
(…)
Para fazer com que um clique do botão mostre um painel, faça:
(...)
if(e.getSource()==botaoQualquer)
card.show(painelMãe, "nomeQualquer");
O método .show(<painel usado para construir o CardLayout>, <"nome dado a um dos painéis adicionados">) tratará de exibir o que você quer onde você quer.
Para amansar qualquer outra dúvida, compile e rode este exemplo:
import java.awt.;
import java.aet.event.;
import javax.swing.*;
public class CardeLeiauti extends JFrame implements ActionListener
{
JPanel painelBotoes, painelCard, p1,p2,p3;
JButton b[], bpainel1, bpainel2, bpainel3;
JLabel l1, l2, l3;
JTextField t1, t2;
public CardeLeiauti(){
setTitle("Cardes!!!");
setSize(180,170);
// layout do container principal (da janela)
getContentPane().setLayout(new BorderLayout());
// inicializando os botões:
b=new JButton[6];
for(int i=0;i<6;i++) b[i]=new JButton("Botão "+i);
// criando botões responsáveis pela mudança do painel exibido
bpainel1=new JButton("Painel 1"); bpainel1.addActionListener(this);
bpainel2=new JButton("Painel 2"); bpainel1.addActionListener(this);
bpainel3=new JButton("Painel 3"); bpainel1.addActionListener(this);
l1=new JLabel("Este é o painel 1", JLabel.CENTER);
l2=new JLabel("Este é o painel 2", JLabel.CENTER);
l3=new JLabel("Este é o painel 3", JLabel.CENTER);
t1=new JTextField("Existem dez tipos de pessoas…", 20);
t2=new JTextField("as que entendem binário e as que não entendem",10);
// atenção aqui -------------------------------------------- !!! ----------
painelCard=new JPanel();
painelCard.setLayout(new CardLayout());
//------------------------------------------------------------------------------
painelBotoes=new JPanel();
painelBotoes.setLayout(new GridLayout(1,3));
//criando cada painel que será exibido:
p1=new JPanel();
p1.add(l1); p1.add(t1); p1.add(t2);
p2=new JPanel();
p2.setLayout(new GridLayout(4,1));
p2.add(l2); p2.add(b1); p2.add(b2); p2.add(b3);
p3=new JPanel();
p3.setLayout(new BorderLayout());
p3.add("North",b4); p3.add("Center",l3);
p3.add("East",b5); p3.add("South",b6);
// adicionando botões…
painelBotoes.add(bpainel1);
painelBotoes.add(bpainel2);
painelBotoes.add(bpainel3);
// atenção aqui --------------------------------------------- !!! -----------
painelCard.add(p1,"pa1");
painelCard.add(p2,"pa2");
painelCard.add(p3,"pa3");
//-------------------------------------------------------------------------------
getContentPane().add("North",painelBotoes);
getContentPane().add("Center",painelCard);
}// fim do construtor
// atenção aqui ---------------------------------------------------- !!! ----
public void actionPerformed(ActionEvent e){
// criando objeto que vai "virar a página", "passar a carta":
CardLayout c1=( (CardLayout) painelCard.getLayout() );
if(e.getSource==bpainel1)
c1.show(painelCard,"pa1"); // mostra "pa1" no painelCard.
if(e.getSource==bpainel2)
c1.show(painelCard,"pa2"); // mostra "pa2" no painelCard.
if(e.getSource==bpainel3)
c1.show(painelCard,"pa3"); // mostra "pa3" no painelCard.
}
}// O FIM
Além de show(), o objeto de CardLayout ainda tem outros métodos, como
previous(), next(), last() (ou goToLast(), não lembro…), e etc.
Ufa! Acho que exagerei. Nunca dei uma resposta tão grande.
Se houver algum erro no código, foi erro de digitação meu, mesmo.
Espero que tenha ajudado.
Boa sorte.