JPanel dentro do mesmo JFrame

Tenho essa GUI feita puramente no eclipse swing na unha.:ok_hand:
image
A dúvida
Dentro desta área delimitada em vermelho, quando clicar em cima de um desses JButton, quero colocar dentro do mesmo JFrame apenas um JPanel (Onde cada um terá sua fundão ex: formulário de add novo/ um novo formulário de pesquisa/ um formulário apenas para exibir o que foi pesquisado etc…), isso é possível?:ok_man: Realmente se usa um JPanel para isso?,como retirar o JPanel anterior? (usa dispose();)? :pleading_face:

Código da aplicação:

package packData;


import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;

import com.toedter.calendar.JDateChooser;


public class DataMainClass extends JFrame {
	
		JPanel panelControles = new JPanel();
		
		JPanel panelRodape = new JPanel();
		
	
		
		JLabel lblOperador = new JLabel("Operador:");
		JDateChooser chooser = new JDateChooser();
		
		Icon iconeNovo = new ImageIcon(getClass().getResource("addNovo.png"));
		JButton btnNovo = new JButton(iconeNovo);
		Icon iconeEditar = new ImageIcon(getClass().getResource("addEditar.png"));
		JButton btnEditar = new JButton(iconeEditar);
	
		Icon iconeSalvar = new ImageIcon(getClass().getResource("addSalvar.png"));
		JButton btnSalvar = new JButton(iconeSalvar);
		
		Icon iconeDeletar = new ImageIcon(getClass().getResource("addDeletar.png"));
		JButton btnExcluir = new JButton(iconeDeletar);
		
		Icon iconePesquisar = new ImageIcon(getClass().getResource("addPesquisar.png"));
		JButton btnPesquisar = new JButton(iconePesquisar);
		
		JSeparator separator = new JSeparator();
	
	
	public DataMainClass() {
		
		setTitle("MOVIMENTO DE ENTRADA DE COMBUSTÍVEL");
		setSize(500,300);
		setVisible(true);
		setLayout(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setResizable(false);
		
		//JPANEL - CONTROLES CONFIGURAÇÃO
		panelControles.setSize(500,33);
		Color corPanelControles = new Color (255, 255, 255) ;  
		panelControles.setBackground(corPanelControles);	
		
		panelControles.setLayout(new FlowLayout(FlowLayout.LEFT));
		panelControles.add(btnNovo);
		panelControles.add(btnEditar);
		panelControles.add(btnSalvar);   
		panelControles.add(btnExcluir); 
		panelControles.add(btnPesquisar);

		//verificar para que serve - btnNovo.setContentAreaFilled(true);
		// remove a borda do btn - btnNovo.setBorderPainted(false);
		btnNovo.setOpaque(true);

		//Cor dos JButton - Controles
		Color corBtn = new Color (236, 240, 241);
		btnNovo.setBackground(corBtn);
		btnEditar.setBackground(corBtn);
		btnSalvar.setBackground(corBtn);
		btnExcluir.setBackground(corBtn);
		btnPesquisar.setBackground(corBtn);
		
		//Tamanho dos JButton - Controles
		btnNovo.setPreferredSize(new Dimension(22,22));
		btnEditar.setPreferredSize(new Dimension(22,22));
		btnSalvar.setPreferredSize(new Dimension(22,22));
		btnExcluir.setPreferredSize(new Dimension(22,22));
		btnPesquisar.setPreferredSize(new Dimension(22,22));
		
		//cor da bosta do jbutton  btnNovo.setBorder(BorderFactory.createLineBorder(corBtnBorda));
		
		separator.setBackground(new java.awt.Color(75,75,75));
		separator.setPreferredSize(new Dimension(500, 1));

		panelControles.add(separator);
		
//JPANEL - RODAPÉ CONFIGURAÇÃO
		panelRodape.setBackground(Color.WHITE);	
		panelRodape.setLayout(new FlowLayout(FlowLayout.LEFT));
		panelRodape.setBounds(0,240,500,30);
		panelRodape.add(new JLabel("Data de Lançamento:"));
		panelRodape.add(chooser);

		panelRodape.add(lblOperador);
		add(panelControles);
		add(panelRodape);
		

	}
	
	public static void main(String[] args) {
		new DataMainClass();
	}
	
}

Não é inteligente usar swing nos dias de hoje, muito menos fazer “na unha”. Se existe a necessidade de desenvolver para desktop, recomendo que faça um upgrade para JavaFX e utilize o SceneBuilder da GluonHQ.

Interessante sua dúvida. Sim, é possível fazer isso, embora eu não lembre os métodos de cabeça. Você só precisa pensar logicamente como alterar os formulários exibidos.

2 curtidas

Estudando Swing devido a graduação mesmo, aprendi isso na disciplina de Programação Orientado a Objetos e quis dar continuidade, ao menos aprender a desenvolver algum programa e a partir de então evoluir com a carga de conhecimento da “lógica”. Meu foco real é PHP 7. Obrigado por sua resposta. :face_with_hand_over_mouth:

E também achei bem escasso a documentação Fx, ao menos em PT-BR.

Eu imaginei.

É relativamente escasso. Existem alguns sites por aí que ensinam o básico.

Também gostaria de dizer que, no JavaFX, existe a library JPhoenix que adiciona alguns componentes que seguem o Material Design (não lembro se é esse o nome exato) da Google, como o CalendarPick e outras coisas bem úteis, além de deixar o visual bem moderno.

Se não me engano, o @rodriguesabner tem um vídeo falando sobre como podemos deixar uma aplicação desktop java com uma “cara de moderno”. Posso estar incorreto, entretanto.

1 curtida

https://respostas.guj.com.br/37115-nao-consegui-baixar-o-scene-builder

Segundo esse tópico, o Scene Builder não está mais disponível na versão 2.0 e apenas a GluonHQ que disponibiliza. É isso mesmo?
Pelo que entendi a Gluon disponibiliza gratuitamente o software e cobra por serviços próprios assim como a Oracle, certo?

Claro que é possível, inclusive facilita muito a manutenção do seu código pois cada JPanel pode ser implementado em uma classe distinta.

Para apresentar, o jeito mais simples é usar um CardLayout nesse seu JPanel delimitado em vermelho.

Aí, a medida que for clicando nos botões para abrir a tela desejada, se ela ainda não foi instanciada e adicionada ao CardLayout, você instancia e adiciona, senão, simplesmente manda o CardLayout apresentá-la.

Deve ser. Eu só usei o da Gluon, então não tenho base para te falar sobre outros.

Eu até tinha um vídeo falando sobre, mas acabei excluindo, esse exemplos aqui embaixo foram feitos em Swing, ainda tô fazendo uns ajustes, há várias maneiras de se fazer isso.

Pode usar um painel pra cada operação, e dar um hide ou show. Ou usar um setVisible(true);, setVisible(false);

Eu costumo fazer assim, faço tudo no Absolute Layout e depois passo pra o Free(Design Livre), apenas redimensionando cada componente, além de vc ter um sistema que seja redimensionável pra qualquer tipo de resolução, você tem a liberdade (usando o Absolute) de colocar o componente onde quiser!


1 curtida

você faz em netbeans ou “na unha”?

Netbeans, utilizando a interface gráfica!

Estava aprendendo a utilizar “na unha” para saber de fato a função de cada componente:


Fiz mais coisas mas é muito improdutivo e um design extremamente arcaico.
Se perde muito em UI UX. Para usar esse layout absolute no eclipse seria utilizando: setLayout(null);?

Cara, está ficando bem legal! Começar desse jeito é muito bom pro aprendizado! Mas eu concordo com o @FearX, com a Interface Gráfica você ganha muito mais produtividade e agilidade, é normal no começo ficar com a aparência mais básica.

Pra utilizar o absoluto é assim (eu acho que é do NetBeans esse layout), mas tem o .JAR dele na internet.

jPanel1.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

Estou com uma certa dificuldade em como organizar o código.
Ex: eu penso em utilizar uma arquitetura MVC
Só que até o presente momento fiz apenas a camada View restando a M e C. Você teria um projeto (aulas no youtube) bem simples ou até mesmo um código fonte que aborde essa minha necessidade?
grato!

Na real eu tenho um vídeo de reconhecimento facial, o tutorial em si está meio desatualizado, mas o projeto está atualizado:


Fonte: https://github.com/kingaspx/Facial-Recognition

Eu uso o MVC no projeto

Classe Modelo:

Classe Controle:

Obrigado. :slightly_smiling_face:

1 curtida

Mas que crime, Abner.

2 curtidas