Chamando um JInternalFrame de uma classe separada

8 respostas
lsf

Ola.
Como faco para chamar o JInternalFrame atraves de um menu que esta em uma classe diferente do JFrame. O projeto eh em MDI.

MDI

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JMenuBar;

public class Mdi extends JFrame{
    
    JDesktopPane desktop;

    public Mdi(){
        
        super("Programa");
        
        JMenuBar menu = Menu.montaMenu();
        setJMenuBar(menu);
        
        iniciaComponentes();

        
    }
    
    public static void main(String args[]){
        
        new Mdi().setVisible(true);
        
    }
    
    private void iniciaComponentes(){
        pack();
        
        setExtendedState(MAXIMIZED_BOTH);
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        
        setContentPane(new JDesktopPane());
    }

}

Menu

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class Menu{
    
    public static JMenuBar montaMenu(){
        
        JMenuBar menu= new JMenuBar();
        
        JMenu menuArquivo = new JMenu("Arquivo");
        
        JMenuItem itemMenuArquivo = new JMenuItem("Novo");
        
        menuArquivo.add(itemMenuArquivo);
        
        menu.add(menuArquivo);
        
        itemMenuArquivo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //chamar o JInternalFrame aqui
                
            } 
        });
        
        return menu;
    }
    
}

JInternalFrame

import javax.swing.JInternalFrame;

public class InternalFrameDemo extends JInternalFrame{
    
    
    public InternalFrameDemo() {
        setSize(300,300);
        
        setVisible(true);
    }
    
}

Ta na cara que sou iniciante, por isso eu agradeco qq ajuda.

falou

8 Respostas

acopiara

Você pode criar um metodo dentro do JFrame que receba uma referencia de JInternalFrame e adicione ao JDesktopPane!

Valeu,

Alysson Bandeira

lsf

Desculpa cara, mas eu nao entendi.
Vc pode explicar denovo :slight_smile:

E

cara…tu podes adicionar um actionListener em um de seus submenus pra chamar o internalframe e adicioná-lo ao seu desktoppane

tipo:

//sendo 'desktop' o JDesktopPane onde será adicionado seu intFrame
subMenu.addActionListener(iFrame(desktop));

public class InternalFrameDemo extends JInternalFrame implements ActionListener
{   
     public InternalFrameDemo(JDesktopPane desktop)
    {
         desktop.add(this);
         setSize(300,300);
    }
     
    public void actionPerformed(ActionEvent event)
   {
        setVisible(true);
    }
}

seria algo mais ou menos assim…

flws

lsf

Ola, obrigado pela resposta.
Eu nao entendi direio mas estou determinado a aprender. 8)

Ele gerou esse saida:

symbol  : variable desktop

location: class Menu

itemMenuArquivo.addActionListener(Mdi(desktop));

1 error

FALHA NA EXECUÇÃO (tempo total: 1 segundo)

no netbeans, como estou querendo aprender realmente, nao uso a sua ferramenta grafica. Fico soh no editor de codigo.

Provavelmente eu fiz algo errado, segue o codigo:

MDI:

Menu:

Frame interno:

H

Ôpa!

Se eu entendi bem você tem vários JInternalFrames abertos e todos listados em um menu. Ao clicar no menu referente ao JInternalFrame clicado você quer torná-lo ativo.

só que você tem uma classe específica para o Menu.

Se estou acompanhando seu raciocinio quando você abrir um JInternalFrame você vai adicionar o mesmo ao menu e neste momento você deve adicionar o evento para torná-lo ativo. Para que isso seja possível no momento em que você for criar o MenuItem você passa qual hé o JDesktopPane para criar o evento.

Espero ter ajudado!

H

dê uma olhada neste post:

http://www.guj.com.br/posts/list/0/8688.java#351749

lsf

Bem hugomalta não era bem isso. objetivo era ter um mdi, um menu e uma janela. Cada um com sua classe.
Consegui resolver o problema, segue o código caso mais alguem passe pelo mesmo problema:

Mdi

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JMenuBar;

public class Mdi extends JFrame{
    
    JDesktopPane desktop;

    public Mdi(){
        
        super("Programa");
        
        desktop = new JDesktopPane();
        
        JMenuBar menu = Menu.montaMenu(desktop);
        setJMenuBar(menu);
        
        pack();
        
        setExtendedState(MAXIMIZED_BOTH);
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        
        setContentPane(desktop);

        
    }
    
    public static void main(String args[]){
        
        new Mdi().setVisible(true);
        
    }
    

}

Menu

import javax.swing.JDesktopPane;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class Menu{
    
    public static JMenuBar montaMenu(JDesktopPane desktop){
        
        JMenuBar menu= new JMenuBar();
        
        JMenu menuArquivo = new JMenu("Arquivo");
        
        JMenuItem itemMenuArquivo = new JMenuItem("Novo");
        
        menuArquivo.add(itemMenuArquivo);
        
        menu.add(menuArquivo);
        
        itemMenuArquivo.addActionListener(new InternalFrameDemo(desktop));
        
        return menu;
    }
    
}

Janela

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;

 
 public class InternalFrameDemo extends JInternalFrame implements ActionListener
 {   
      public InternalFrameDemo(JDesktopPane desktop)
     {
          desktop.add(this);
          setSize(300,300);
     }
      
     public void actionPerformed(ActionEvent event)
    {
         setVisible(true);
     }
 }

É isso ai.
Obrigado pela ajuda.

digolipertte
como faço para colocar um actionlistener aki nesse codigo?
package Modelo;
import java.awt.Event;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Login extends JFrame{

	JFrame Logo = new JFrame(); // Referente a tela do login.
	JLabel im= new JLabel(new ImageIcon ("src/Modelo/im.jpg"));// Referente a imagem de fundo.	
             
	        //Aqui é referente aos campos de usuario e senha.
	JTextField usuario = new JTextField();
	JTextField senha = new JTextField();
	
	        // Aqui é referente aos rotulos de usario e senha.
	JLabel rotulo1 =new JLabel("Usuario");
	JLabel rotulo2  = new JLabel("Senha");
	
	        // Referente aos botões de entra e cancela.
	
	JButton entra = new JButton();
	JButton cancela = new JButton(new ImageIcon(getClass().getResource("im.jpg"))); 
	
		
	
	 //Esse metodo é referente a exibição da tela do login, por ele que chamamos no main
	
	public  Login(){
	    // Referente as propriedades da tela.
		Logo.setLayout(null);
		Logo.setLocationRelativeTo( null );//para centralizar no meio da tela.
        Logo.setUndecorated(true);
		Logo.setSize(330,70);
		
		//Container c = Logo.getContentPane();
		//c.setLayout(null);
		//c.setBackground(Color.green);
		//Referente as propriedade de add.
		
		Logo.getContentPane().add(im);
		Logo.add(rotulo1);
		Logo.add(rotulo2);
		Logo.add(usuario);
		Logo.add(senha);
		Logo.add(entra);
		Logo.add(cancela);

  // Referente a imagem de fundo da tela do logo.
		
	    //im.setVisible(true);
		//im.setSize(330,70);
		//im.setLocation(0,0);
		//im.setBackground(null);
		
		// Referente as posição e tamanhos.
		rotulo1.setVisible(true);
		rotulo1.setSize(80,20);
		rotulo1.setLocation(10,10);
		
		rotulo2.setVisible(true);
		rotulo2.setSize(80,20);
		rotulo2.setLocation(10,40);
		
		usuario.setVisible(true);
		usuario.setSize(150,20);
		usuario.setLocation(70,10);
		
		senha.setVisible(true);
		senha.setSize(150,20);
		senha.setLocation(70,40);
		
		entra.setVisible(true);
		entra.setSize(70,20);
		entra.setLocation(250,10);
	
		
		
		cancela.setVisible(true);
		cancela.setSize(70,20);
		cancela.setLocation(250,40);
		
		//add actionlistener no botão.
		 	
      
		//Referente a visibilidade da tela do logo,
		 // Obs. a visibilidade deve ficar sempre no fim da tela.
		
		Logo.setVisible(true);
		Logo.setDefaultCloseOperation(EXIT_ON_CLOSE);
	
		
	
}
}
Criado 8 de agosto de 2007
Ultima resposta 25 de set. de 2008
Respostas 8
Participantes 5