Problemas fechar um janela do JInternalFrame quando clicar para abrir outro JInternalFrame

3 respostas
J

Olá, pessoal!

Tentando várias vezes para testar fechar janela várias vezes em cada item do menu para chamar uma janela mas ocorreu erro. veja o mensagem de erro em baixo:

<blockquote>

Exception in thread “AWT-EventQueue-0” java.lang.IllegalArgumentException: illegal component position

at java.awt.Container.addImpl(Unknown Source)

at javax.swing.JLayeredPane.addImpl(Unknown Source)

at javax.swing.JDesktopPane.addImpl(Unknown Source)

at java.awt.Container.add(Unknown Source)

at Teste.JanelaInterno.actionPerformed(JanelaInterno.java:128)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.AbstractButton.doClick(Unknown Source)

at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)

at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEventImpl(Unknown Source)

at java.awt.EventQueue.access$000(Unknown Source)

at java.awt.EventQueue$1.run(Unknown Source)

at java.awt.EventQueue$1.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)

at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue$2.run(Unknown Source)

at java.awt.EventQueue$2.run(Unknown Source)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)</blockquote>

Código da java é

public class JanelaInterno extends JFrame implements ActionListener {
	JMenu mAluno, mProf;
	JDesktopPane dtpPane;
	private Janela1 janela1;
	private Janela2 janela2;

	public JanelaInterno() {
		super("Janela Interno");

		dtpPane = new JDesktopPane();

		this.setJMenuBar(barraMenu());
		this.setContentPane(dtpPane);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(400, 400);
		this.setVisible(true);

	}

	public JMenuBar barraMenu() {

		JMenuBar barra = new JMenuBar();

		String[] itemAluno1 = { "Disciplina", "Conceitos" };

		mAluno = menu("Aluno", itemAluno1);

		barra.add(mAluno);

		String[] itemProfConceito = { "Consulta Conceitos",
				"Atribuir Conceitos" };
		String[] itemProfFaltas = { "Verifica faltas", "Atribuir Faltas" };

		JMenu[] mProfSubMenu = { menu("Conceitos", itemProfConceito),
				menu("Faltas", itemProfFaltas) };

		mProf = menu("Professor", mProfSubMenu);

		barra.add(mProf);

		return barra;
	}

	@SuppressWarnings("unused")
	private JMenu menu(String nome) {
		JMenu j = new JMenu(nome);
		j.setActionCommand(nome.toLowerCase());
		j.addActionListener(this);

		return j;
	}

	private JMenu menu(String nome, String[] nomeItem) {
		JMenu j = new JMenu(nome);

		for (int i = 0; i < nomeItem.length; i++) {
			j.add(item(nomeItem[i]));
		}
		return j;
	}

	private JMenu menu(String nome, JMenu[] submenu) {
		JMenu j = new JMenu(nome);

		for (int i = 0; i < submenu.length; i++) {
			j.add(submenu[i]);
		}
		return j;
	}

	@SuppressWarnings("unused")
	private JMenu menu(String nome, JMenuItem[] nomeItem) {
		JMenu j = new JMenu(nome);

		for (int i = 0; i < nomeItem.length; i++) {
			j.add(item(nomeItem[i]));
		}
		return j;
	}

	private JMenuItem item(String nome) {

		JMenuItem j = new JMenuItem(nome);
		j.setActionCommand(nome.replace(" ", "_").toLowerCase());
		j.addActionListener(this);

		return j;
	}

	private JMenuItem item(JMenuItem j) {
		System.out.println("JmenuItem: "
				+ j.getText().toString().toLowerCase().replace(" ", "_"));
		j.setActionCommand(j.getText().toString().toLowerCase()
				.replace(" ", "_"));
		j.addActionListener(this);

		return j;
	}

	@Override
	public void actionPerformed(ActionEvent e) {

		if ("disciplina".equals(e.getActionCommand())) {

			if (janela2 != null) {
				janela2.dispose();
			}

			if (janela1 == null) {
				janela1 = new Janela1();
				janela1.setVisible(true);
				dtpPane.add(janela1);
			} 

		}
		if ("conceitos".equals(e.getActionCommand())) {

			// verifica se as janelas está aberta e fecha na janela1.
			if (janela1 != null) {
					janela1.dispose();
			}
			// se janela não está aberta apenas abre;
			if (janela2 == null) {
				janela2 = new Janela2();
				janela2.setVisible(true);
				dtpPane.add(janela2);
			} 
		}

		if ("consulta_conceitos".equals(e.getActionCommand())) {
			System.out.println("Consulta Conceitos");
		}
		if ("atribuir_conceitos".equals(e.getActionCommand())) {
			System.out.println("Atribuir Conceitos");
		}
		if ("verifica_faltas".equals(e.getActionCommand())) {
			System.out.println("Verifica faltas");
		}
		if ("atribuir_faltas".equals(e.getActionCommand())) {
			System.out.println("Atribuir Faltas");
		}

	}

}

Espero até me ajuda para uma dica a resolver esse problemas

3 Respostas

I

Não entendi muito bem sua dúvida e o código não consegui testar porque o código possui dependências.
Você quer fechar JInternalFrame e não consegue?

J

Ivan Alves:
Não entendi muito bem sua dúvida e o código não consegui testar porque o código possui dependências.
Você quer fechar JInternalFrame e não consegue?

Quer dizer é fechar um JInternalFrame só quando clicar no menu para chamar outro JInternalFrame para abrir é forma automatica. Em cada clicar menu, fechar alguns JInternalFrame que está aberta e chame um JInternalFrame quando estiver clicando um menu.

Veja alguns código em baixo

if ("disciplina".equals(e.getActionCommand())) {
                       

                       // verifica se Janela 2 está aberta, fecha a janela 2
			if (janela2 != null) {
				janela2.dispose();
			}
                        

                       // verifica se janela 1 não está aberta, chama janela 1 para abrir.
			if (janela1 == null) {
				janela1 = new Janela1();
				janela1.setVisible(true);
				dtpPane.add(janela1);
			} 

		}
		if ("conceitos".equals(e.getActionCommand())) {

			// verifica se a janela 1 está aberta e fecha na janela 1.
			if (janela1 != null) {
					janela1.dispose();
			}
			// se janela 2 não está aberta e chame para abrir janela 2;
			if (janela2 == null) {
				janela2 = new Janela2();
				janela2.setVisible(true);
				dtpPane.add(janela2);
			} 
		}
I

jsnpereira:
Ivan Alves:
Não entendi muito bem sua dúvida e o código não consegui testar porque o código possui dependências.
Você quer fechar JInternalFrame e não consegue?

Quer dizer é fechar um JInternalFrame só quando clicar no menu para chamar outro JInternalFrame para abrir é forma automatica. Em cada clicar menu, fechar alguns JInternalFrame que está aberta e chame um JInternalFrame quando estiver clicando um menu.

Veja alguns código em baixo

if ("disciplina".equals(e.getActionCommand())) {
                       

                       // verifica se Janela 2 está aberta, fecha a janela 2
			if (janela2 != null) {
				janela2.dispose();
			}
                        

                       // verifica se janela 1 não está aberta, chama janela 1 para abrir.
			if (janela1 == null) {
				janela1 = new Janela1();
				janela1.setVisible(true);
				dtpPane.add(janela1);
			} 

		}
		if ("conceitos".equals(e.getActionCommand())) {

			// verifica se a janela 1 está aberta e fecha na janela 1.
			if (janela1 != null) {
					janela1.dispose();
			}
			// se janela 2 não está aberta e chame para abrir janela 2;
			if (janela2 == null) {
				janela2 = new Janela2();
				janela2.setVisible(true);
				dtpPane.add(janela2);
			} 
		}

Tente o

em vez do

Criado 8 de novembro de 2012
Ultima resposta 9 de nov. de 2012
Respostas 3
Participantes 2