Como utilizar JDialog como se fosse JInternalFrame?

3 respostas
C

Ola pessoal.

Gostaria de saber como usar o JDialog como se fosse um JInternalFrame. Eu tenho um JFrame, nele contem um JMenuBar, um JMenu e um JMenuItem, e ao clicar no JMenuItem chama o JDialog. Eu gostaria de deixar esses JDialog igual ao JInternalFrame. Quero que ele ocupe toda a tela restante do aplicativo como o JIntenalFrame faz, e gostaria de saber como criar um evento para quando ele for ser fechado exibir um JOptionPane perguntando se deseja mesmo fechar essa tela.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Principal extends JFrame{
	
	private JDesktopPane desktopPane;
	private JMenuBar menuBar;
	private JMenu menu; 
	private JMenuItem menuItem1;
	private JDialog1 jd1;

	public Principal(){
		super("Principal");
		setExtendedState(MAXIMIZED_BOTH);
		setSize(500,400);
		setLocationRelativeTo(null);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		desktopPane = new JDesktopPane();
		menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		menu = new JMenu("Menu");
		
		menuItem1 = new JMenuItem("MenuItem1");
		menuItem1.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
			if(jd1 == null){
				jd1 = new JDialog1();
				jd1.setVisible(true);
			}
			else if(!jd1.isVisible()){
				jd1.setVisible(true);
			}
		}});
				
		setContentPane(desktopPane);
		menuBar.add(menu);
		menu.add(menuItem1);
		}
	
	public static void main(String[]args){
		Principal principal = new Principal();
	}
}
import java.awt.*;
import javax.swing.*;

public class JDialog1 extends JDialog{

	public JPanel panel;
	public Container container;
	
	public JDialog1(){
		setTitle("JDialog");
		setModal(true);
		
		panel = new JPanel();
		container = getContentPane();
		container.add(panel);
		
		this.dispose();
	}
}

Essa minha duvida é apenas para estudo mesmo, ainda nem comecei a aprender sobre swing e interface grafica na faculdade mas já me interessei e estou aprendendo por conta.

P.s: Eu estou programando no JGrasp e ele não tem a ferramenta para edição de componentes do swing igual o NetBeans e o Eclipse, é tudo feito a partir de linhas de comando, nada de arrastar e talz ^^".

3 Respostas

C

Edit.

Estou tentando fazer um tela com JDialog que quando chamada no JMenuItem abra maximizada semelhante ao JInternalFrame, porem modal. Se não é possível colocar o JDialog no JDesktopPane, qual recurso eu uso nesse caso?

Ficarei muito grato se alguém puder me ajudar.

C

Olá.
Acho que não pode usar JDialog dentro do JDesktopPane.
Existem um bando de hacks para se fazer uma coisa parecida mas não vale à pena. O normal é os Dialogos virem fora do JDesktopPane.
Até em grandes aplicações como MS Access e Photoshop os dialogos vem fora do JDesktopPane.
Aconselho a seguir o que é normal em aplicações e colocar o Dialogo fora.

C

Valeu Clercio Guiliche.

Mas como eu faço para o JDialog ficar abaixo da barra de Menu e ocupando todo o restante da tela? Semelhante ao JInternalFrame.

Criado 12 de julho de 2012
Ultima resposta 13 de jul. de 2012
Respostas 3
Participantes 2