Chamar Janelas?

4 respostas
F

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

4 Respostas

R

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.

:slight_smile:

F

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!!!

raikk0n3n

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!!!

Luiz_Rocha

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>, &lt"nome dado a um dos painéis adicionados"&gt) tratará de exibir o que você quer onde você quer.

Para amansar qualquer outra dúvida, compile e rode este exemplo:

import java.awt.<em>;

import java.aet.event.</em>;

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&lt6;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.

Criado 29 de novembro de 2006
Ultima resposta 29 de nov. de 2006
Respostas 4
Participantes 4