Dúvida Java - Inicial (Abrir painel em um Frame com classes distintas)

12 respostas
A

Olá a todos…
Seguinte… estou tentando criar um programa com java… só que não sei como chamar um painel criado em uma classeEstoque via botão de uma classePrincipalMain.
O meu codigo na classePrincipal é o seguinte:

public class ProgramaEnigMais extends JFrame {

private JPanel PainelCaixa = null;	 // gostaria que ficasse em outra classe(como a classeEstoque)
private JLabel TituloCaixa = null;	 // gostaria que ficasse em outra classe(como a classeEstoque)
private JPanel RealCaixa = null; 	// gostaria que ficasse em outra classe(como a classeEstoque)
private JButton DirecionarCaixa = null;
private JButton DirecionarEstoque = null;
private JButton getDirecionarCaixa() {
	if (DirecionarCaixa == null) {
		DirecionarCaixa = new JButton();
		DirecionarCaixa.setBounds(new Rectangle(42, 21, 93, 37));
		DirecionarCaixa.setText("Caixa");
	}
	return DirecionarCaixa;
}
private JButton getDirecionarEstoque() {
	if (DirecionarEstoque == null) {
		DirecionarEstoque = new JButton();
		DirecionarEstoque.setBounds(new Rectangle(145, 21, 94, 36));
		DirecionarEstoque.setText("Estoque");
	}
	return DirecionarEstoque;
}

private JPanel getPainelCaixa() {				// gostaria que ficasse em outra classe(como a classeEstoque)
	if (PainelCaixa == null) {				// gostaria que ficasse em outra classe(como a classeEstoque)
		TituloCaixa = new JLabel();			// gostaria que ficasse em outra classe(como a classeEstoque)
		TituloCaixa.setText("Caixa");			// gostaria que ficasse em outra classe(como a classeEstoque)
		TituloCaixa.setBounds(new Rectangle(1, 1, 63, 32));	// gostaria que ficasse em outra classe(como a classeEstoque)
		TituloCaixa.setFont(new Font("Dialog", Font.BOLD, 24));	// gostaria que ficasse em outra classe(como a classeEstoque)
		PainelCaixa = new JPanel();			// gostaria que ficasse em outra classe(como a classeEstoque)
		PainelCaixa.setLayout(null);			// gostaria que ficasse em outra classe(como a classeEstoque)
		PainelCaixa.setName("Caixa");			// gostaria que ficasse em outra classe(como a classeEstoque)
		PainelCaixa.setPreferredSize(new Dimension(1, 1));	// gostaria que ficasse em outra classe(como a classeEstoque)
		PainelCaixa.add(getDirecionarEstoque(), null);	// gostaria que ficasse em outra classe(como a classeEstoque)
		PainelCaixa.add(getDirecionarCaixa(), null);	// gostaria que ficasse em outra classe(como a classeEstoque)
		PainelCaixa.add(getRealCaixa(), null);		// gostaria que ficasse em outra classe(como a classeEstoque)
	}
	return PainelCaixa;					// gostaria que ficasse em outra classe(como a classeEstoque)
}

public ProgramaEnigMais() {
	super();
	initialize();
	Container tela = getContentPane();
	setLayout(null);
	DirecionarEstoque.addActionListener(new ActionListener() {		//Abrindo o painel que está na classe estoque.. mas não sei o codigo
		public void actionPerformed(ActionEvent e) {
			RealCaixa.setVisible(false);			//ocultando o painel caixa

		}
	});
	DirecionarCaixa.addActionListener(new ActionListener() {		//Abrindo o painel caixa q gostaria que estivesse em outra classe
		public void actionPerformed(ActionEvent e) {
			RealCaixa.setVisible(true);			//Abrindo o painel caixa q gostaria que estivesse em outra classe
		}
	});
	setSize(1250, 750);
	setVisible(true);

}


private void initialize() {
	this.setTitle("EnigMais Quebra-Cabeças");
	this.setContentPane(getPainelCaixa());
	this.setBounds(new Rectangle(0, 0, 1250, 750));
	this.setVisible(false);
}

private JPanel getRealCaixa() {						// gostaria que ficasse em outra classe(como a classeEstoque)
	if (RealCaixa == null) {					// gostaria que ficasse em outra classe(como a classeEstoque)
		RealCaixa = new JPanel();				// gostaria que ficasse em outra classe(como a classeEstoque)
		RealCaixa.setLayout(null);				// gostaria que ficasse em outra classe(como a classeEstoque)
		RealCaixa.setBounds(new Rectangle(0, 98, 1233, 613));	// gostaria que ficasse em outra classe(como a classeEstoque)
		RealCaixa.setForeground(new Color(204, 102, 255));		// gostaria que ficasse em outra classe(como a classeEstoque)
		RealCaixa.setBackground(SystemColor.activeCaption);	// gostaria que ficasse em outra classe(como a classeEstoque)
		RealCaixa.add(TituloCaixa, null);			// gostaria que ficasse em outra classe(como a classeEstoque)
	}							// gostaria que ficasse em outra classe(como a classeEstoque)
	return RealCaixa;						// gostaria que ficasse em outra classe(como a classeEstoque)
}

public static void main(String args[]) {
	ProgramaEnigMais app = new ProgramaEnigMais();
	app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

}

Já a classeEstoque está dentro da mesma pasta assim:
public class Estoque extends JPanel {

private static final long serialVersionUID = 1L;
private JLabel TituloEstoque = null;

public Estoque() {
	super();
	initialize();
}

private void initialize() {
	TituloEstoque = new JLabel();
	TituloEstoque.setText("Estoque");
	TituloEstoque.setBounds(new Rectangle(15, 4, 72, 24));
	TituloEstoque.setFont(new Font("Dialog", Font.BOLD, 18));
	this.setSize(300, 200);
	this.setLayout(null);
	this.setBackground(Color.magenta);
	this.setName("PainelEstoque");
	this.add(TituloEstoque, null);
}

}

Alguem me ajuda como ficaria o codigo para tornar o JpainelEstoque visivel na jFramePrincipal e deixar a JpainelCaixa Oculto enquanto isso!?
Desde já… grato.

12 Respostas

Alvarino

eu tbm nao entendi direito… voce quer da sua tela principal chamar uma outra janela e nao permitir que o usuario acesse a anterior ?

se for isso tem que adicionar a ação no seu botao estoque da sua class principal…

private JButton getDirecionarEstoque() {
	if (DirecionarEstoque == null) {
		DirecionarEstoque = new JButton();
		DirecionarEstoque.setBounds(new Rectangle(145, 21, 94, 36));
		DirecionarEstoque.setText("Estoque");
		DirecionarEstoque.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				Estoque estoque = new Estoque();
				estoque.setVisible(true);
			}
		});
	}
	return DirecionarEstoque;
}
A

Foi mal… esse é meu primeiro tópico… sou leigo ainda!
Agora… n é essa minha dúvida não.

O que qro saber é o codigo que eu coloco em meu botão pra chamar o painel criado na classe estoque.

DirecionarEstoque.addActionListener(new ActionListener() {		//Abrindo o painel que está na classe estoque… mas não sei o codigo

public void actionPerformed(ActionEvent e) {

RealCaixa.setVisible(false);

E se eu tenho q acrescentar algo na class estoque.

A

é esse minha dúvida msm!
Mas tentei Alvarino… colocar

Estoque estoque = new Estoque();   
            estoque.setVisible(true);

E quando eu clico no Botão DirecionarEstoque… apenas oculta o painelCaixa. Mas não abri o painelEstoque.

Obs. Não consigo colocar em tag… formado de codgo. aki no forum.

Alvarino

troque o extends da sua classe estoque de JPanel para JFrame…

A

Alvarino isso resolvi mas não é a minha intenção.
A ideia é abrir na msm pagina e não uma nova janela.
Quado eu coloco um frame ele abri em uma nova janela.
Gostaria que fosse um painel como o PainelCaixa…
a única diferença é que ele fosse criado em outras classe…
pra a classe principal ficar apenas chamando os paineis das outras classes.

Mas de qlqr forma… eu já agradeço pela ajuda até agora.

Agora thejokerbm … num sei se eu q sou mto leigo… mas n ta dando certo esse comando não.

Vlw

A

Pode ser removendo e add… só gostaria que o painel fosse criado em outra classe.

A

Alguém sabe o que devo fazer pra conseguir?

A

Pessoal.. quero agradecer a todos que ajudaram!
Consegui resolver já =]
Quando conseguimos é quase igual a fazer um gol!

Olha só como ficou o codgo.. "pode ficar melhor.. e é oq pretendo fazer.. mas inicialmente está cumprindo com a necessidade"

public class ProgramaEnigMais extends JFrame {
	private JPanel PainelPrincipal = null;
	private JLabel TituloCaixa = null;
	private JPanel RealCaixa = null;
	private JButton DirecionarCaixa = null;
	private JButton DirecionarEstoque = null;
	private JLabel jLabel2 = null;
	private JPanel PainelMenu = null;

	private JButton getDirecionarCaixa() {
		if (DirecionarCaixa == null) {
			DirecionarCaixa = new JButton();
			DirecionarCaixa.setText("Caixa");
			DirecionarCaixa.setBounds(new Rectangle(5, 8, 80, 30));
		}
		return DirecionarCaixa;
	}

	private JButton getDirecionarEstoque() {
		if (DirecionarEstoque == null) {
			DirecionarEstoque = new JButton();
			DirecionarEstoque.setText("Estoque");
			DirecionarEstoque.setBounds(new Rectangle(5, 45, 80, 30));
		}
		return DirecionarEstoque;
	}

	private JPanel getPainelPrincipal() {
		if (PainelPrincipal == null) {
			jLabel2 = new JLabel();
			jLabel2.setDisplayedMnemonic(KeyEvent.VK_UNDEFINED);
			jLabel2.setIcon(new ImageIcon("D:/Imagens/Simbolo sem fundo.png"));
			jLabel2.setText("EnigMais Quebra-Cabeças");
			jLabel2.setBounds(new Rectangle(5, 5, 376, 70));
			jLabel2.setFont(new Font("Dialog", Font.BOLD, 24));
			TituloCaixa = new JLabel();
			TituloCaixa.setText("Caixa");
			TituloCaixa.setBounds(new Rectangle(1, 1, 63, 32));
			TituloCaixa.setFont(new Font("Dialog", Font.BOLD, 24));
			PainelPrincipal = new JPanel();
			PainelPrincipal.setLayout(null);
			PainelPrincipal.setName("Caixa");
			PainelPrincipal.setPreferredSize(new Dimension(1, 1));
			PainelPrincipal.add(getPainelMenu(), null);
			PainelPrincipal.add(getRealCaixa(), null);
			PainelPrincipal.add(jLabel2, null);
			PainelPrincipal.add(Estoque.getJPanel());
		}
		return PainelPrincipal;
	}

	public ProgramaEnigMais() {
		super();
		initialize();
		setLayout(null);
		DirecionarEstoque.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				RealCaixa.setVisible(false);
				Estoque.getJPanel();
				Estoque.jPanel.setVisible(true);
				Estoque.jPanel.setBounds(new Rectangle(0, 82, 1233, 629));
			}
		});
		DirecionarCaixa.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				RealCaixa.setVisible(true);
			}
		});
		setSize(1250, 750);
		setVisible(true);
	}

	private void initialize() {
		this.setTitle("EnigMais Quebra-Cabeças");
		this.setContentPane(getPainelPrincipal());
		this.setBounds(new Rectangle(0, 0, 1250, 750));
		this.setVisible(false);
	}

	private JPanel getRealCaixa() {
		if (RealCaixa == null) {
			RealCaixa = new JPanel();
			RealCaixa.setLayout(null);
			RealCaixa.setBounds(new Rectangle(0, 82, 1233, 629));
			RealCaixa.setForeground(new Color(204, 102, 255));
			RealCaixa.setBackground(SystemColor.activeCaption);
			RealCaixa.add(TituloCaixa, null);
		}
		return RealCaixa;
	}

	private JPanel getPainelMenu() {
		if (PainelMenu == null) {
			PainelMenu = new JPanel();
			PainelMenu.setLayout(null);
			PainelMenu.setBounds(new Rectangle(394, 0, 840, 82));
			PainelMenu.setBackground(new Color(204, 204, 204));
			PainelMenu.add(getDirecionarEstoque(), null);
			PainelMenu.add(getDirecionarCaixa(), null);
		}
		return PainelMenu;
	}

	public static void main(String args[]) {
		ProgramaEnigMais app = new ProgramaEnigMais();
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

Classe estoque ficou assim:

import java.awt.Color;
import java.awt.Rectangle;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Estoque extends JPanel {

	private static final long serialVersionUID = 1L;
	static JPanel jPanel = null;
	private static JLabel TituloEstoque = null;

	public Estoque() {
		super();
		initialize();
	}

	private void initialize() {
		this.setLayout(null);
		this.setBounds(new Rectangle(0, 0, 1233, 750));
		this.add(getJPanel(), null);
	}

	static public JPanel getJPanel() {
		if (jPanel == null) {
			TituloEstoque = new JLabel();
			TituloEstoque.setText("Estoque");
			TituloEstoque.setBounds(new Rectangle(4, 2, 89, 55));
			jPanel = new JPanel();
			jPanel.setLayout(null);
			jPanel.setBounds(new Rectangle(0, 82, 1250, 629));
			jPanel.setBackground(Color.magenta);
			jPanel.setVisible(true);
			jPanel.add(TituloEstoque, null);
		}
		return jPanel;
	}
}

Vocês viram que eu aprendi a colocar o codigo =]

Ainda tem o painel Caixa que eu deixei na ClassePrincipal.. mas agora vou tirar já.

Abração a todos.

T

primeiro

poste teu codigo entre “code”

depois sua duvida deveria ser posta em “Interface Grafica”

mas vamos la, nao sei se intendi direito mas se vc quer alterar Jpainel vc deve fazer assim

painelPrincipal.remove(painel1);
painelPrincipal.add(painel2);
painelPrincipal.setVisible(true);

vlw

T

vamus tentar denovo uahuahuah

DirecionarEstoque.addActionListener(new ActionListener() { //Abrindo o painel que está na classe estoque… mas não sei o codigo

public void actionPerformed(ActionEvent e) {

this.remove(PainelCaixa)

this.add(new Estoque());

this.setVisible(true);

}

detalhe seu botao vai sumir junto

uahuahuha

tipo this, esta se referindo ao seu frame
e como estoque extends Jpanel vc pode add direto

vlw

T

tipo cara eh so vc criar dois paineis cada um com as coisas q vc quer e um outro q so vai servir de container

ai ao inves de ficar setando visible vc remove e add entende???

vai por mim na menos bug

T

pow amigo se vc quer em outra classe

crie outra classe coloque um atribulo JPanel
coloca todos componentes q vc quer dentro desse JPanel

e crie um metogo getJPanel();

ai quando vc quiser usar esse painel vc faz

new NomeDaClasse.getJPanel();

isso retornara seu painel.

vlwww

Criado 27 de abril de 2011
Ultima resposta 27 de abr. de 2011
Respostas 12
Participantes 3