Simples questao sobre GUI (mas preciso de uma ajudinha)

7 respostas
vinians

Amigos estou precisando desenvolver um programa que a tela inicial tem o seguinte formato:

Estou usando o Eclipse e estou usando aquele editor de GUI’s (muito bom por sinal) que é um plugin.
Gostaria de saber qual seria a melhor maneira de criar uma tela como essa, pois temos:
JFrame, JDesktop, JInternalFrame etc
Eu geralmente uso o JFrame pra aplicações mais simples, mas esta aplicação tem multiplas janelas é como se fosse um MDI no windows.
Obrigado.

7 Respostas

E

Pena que eu não tenho acesso à tela que você mostrou, então vou chutar às cegas.

Se sua aplicação precisa ter acesso a alguns recursos como:

  • Mostrar um browser dentro da sua aplicação
  • Encapsular um documento do Word, Excel, etc. (algo que se chama OLE em linguagem Microsoft)

então você pode usar SWT e criar uma coisa usando o framework do Eclipse Rich Client Platform: http://wiki.eclipse.org/index.php/Rich_Client_Platform

Se você quer algo relativamente fácil de criar, mas poderoso, e que não precise de tais recursos nativos, você pode usar o NetBeans Platform (http://netbeans.org/features/platform/ ).

vinians

entanglement:
Pena que eu não tenho acesso à tela que você mostrou, então vou chutar às cegas.

Se sua aplicação precisa ter acesso a alguns recursos como:

  • Mostrar um browser dentro da sua aplicação
  • Encapsular um documento do Word, Excel, etc. (algo que se chama OLE em linguagem Microsoft)

então você pode usar SWT e criar uma coisa usando o framework do Eclipse Rich Client Platform: http://wiki.eclipse.org/index.php/Rich_Client_Platform

Se você quer algo relativamente fácil de criar, mas poderoso, e que não precise de tais recursos nativos, você pode usar o NetBeans Platform (http://netbeans.org/features/platform/ ).


Obrigado amigo, mas estou usando o Eclipse para criar os programas e tem dado certo, não pretendo mudar de plataforma ou IDE. Na verdade estou querendo apenas uma ajuda sobre qual gerenciador de layout usar e sobre usar ou nao JInternalFrame ou Panel sabendo que preciso que a janela não seja modal.
Agradeço a ajuda.

matheusunitt

Eu acho que o Eclipse é muito bom, mas em termos de design e organização (programação também), o NetBeans seja mais perfeito, utilize ele, você com certeza vai se surpreender. Caso não deseje, continue a busca, boa-sorte! :slight_smile:

Obrigado amigo, mas estou usando o Eclipse para criar os programas e tem dado certo, não pretendo mudar de plataforma ou IDE. Na verdade estou querendo apenas uma ajuda sobre qual gerenciador de layout usar e sobre usar ou nao JInternalFrame ou Panel sabendo que preciso que a janela não seja modal.
Agradeço a ajuda.

Desculpe, não li este trecho ;s

charles.eduardo

Vinias, acredito que como você terá multiplas janelas e conhece o padrão MDI.
Cria a JFrame principal, nela cria um JDesktopPane que ira receber as suas multiplas janelas JInternalFrame.

Aqui explica como fazer… http://docs.oracle.com/javase/tutorial/uiswing/components/internalframe.html.

Boa sorte!

rogeriopaguilar

Acho que você pode utilziar o BorderLayout mesmo. Primeiro você monta o menú e a barra de tarefas e coloca na posição superior do borderlayout do container principal. Depois, na posição inferior você coloca um label ou algum outro componente, que será sua barra de status. Na posição central do norderlayout você coloca um jpanel que, por sua vez, também utilizará o borderlayout. Neste jpanel central você utiliza o borderlayout só que posicionando os componentes na esquerda e na direita. Você pode utilizar um jdesktoppane no componente da direita caso queira que as janelas apareçam nele.
Eu montei rapidamente um mock pra você poder ter como base (não sei se o código está legal, pois fiz correndo aqui, hehe):

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;


public class JanelaInicial extends JFrame{

	private JMenuBar barraFerramentas;
	private JPanel painelStatus;
	private JLabel barraStatus;
	private JMenu menu;
	private JPanel painelComponentesEsquerda;
	private JSplitPane splitPane;
	private JDesktopPane painelJanelas;
	
	public JanelaInicial(){
		super("Teste Layout");
		inicializarComponentes();
		setSize(800, 600);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
	
	private void inicializarComponentes() {
		Container containerPrincipal = getContentPane();
		containerPrincipal.setLayout(new BorderLayout());
		criarBarraFerramentas(containerPrincipal);
		criarPaineisPrincipais(containerPrincipal);
		criarBarraStatus(containerPrincipal);
	}

	private void criarBarraFerramentas(Container containerPrincipal) {
		barraFerramentas = new JMenuBar();
		menu = new JMenu("Menu");
		JMenuItem item = new  JMenuItem("Item");
		menu.add(item);
		barraFerramentas.add(menu);
		setJMenuBar(barraFerramentas);
		JToolBar toolbar = new JToolBar();
		toolbar.add(new JButton("Teste"));
		containerPrincipal.add(toolbar, BorderLayout.PAGE_START);
	}

	private void criarPaineisPrincipais(Container containerPrincipal) {
		
		criarComponentesEsquerda();

		JDesktopPane painelJanelas = new JDesktopPane();
		JInternalFrame frameInterno = new JInternalFrame("Teste Frame Interno");
		painelJanelas.add(frameInterno);
		frameInterno.setVisible(true);
		frameInterno.setSize(new Dimension(200,200));

		splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
				painelComponentesEsquerda, painelJanelas);
		splitPane.setOneTouchExpandable(true);
		splitPane.setDividerLocation(150);
		Dimension minimumSize = new Dimension(100, 50);
		painelComponentesEsquerda.setMinimumSize(minimumSize);
		painelJanelas.setMinimumSize(minimumSize);
		containerPrincipal.add(splitPane,BorderLayout.CENTER);
		
	}


	private void criarComponentesEsquerda() {
		painelComponentesEsquerda = new JPanel();
		painelComponentesEsquerda.add(new JLabel("Aqui vão os componentes da esquerda"));
	}
	
	private void criarBarraStatus(Container containerPrincipal) {
		painelStatus = new JPanel(new FlowLayout(FlowLayout.LEFT));
		painelStatus.setBorder(BorderFactory.createBevelBorder(1));
		painelStatus.add(new JLabel("Status",SwingConstants.LEFT));
		Dimension d = painelStatus.getMaximumSize();
		containerPrincipal.add(painelStatus,BorderLayout.SOUTH);
	}
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new JanelaInicial().setVisible(true);
			}
		});
	}
	
	
}
vinians

Valeu pessoal, deu certo aqui! Obrigado a todos!

jaissonduarte

cara aproveitando o teu tópico, como faria para mostrar meus JFrames no teu conteúdo (vermelha)
alguém poderia mostrar como fazer isso
vaelu

Criado 5 de abril de 2012
Ultima resposta 6 de abr. de 2012
Respostas 7
Participantes 6