InternalFrame --- Actions / JDesktopPane em classes diferentes!

3 respostas
grlongo

Bom dia pessoal!
Estou com uma dúvida que não consigo resolver a semanas!

Estou com um simples sistema de InternalFrames mas tenho minhas actions em classe diferente da do meu JDesktopPane. Se eu programa tudo em uma funciona blz, mas com essa divisão, não consigo fazer meus InternalFrames aparecerem no JDesktopPane.
Já procurei ajuda em listas, forúns, apostilas, sites e nada ainda…!

Acredito que é problema na hora de chamar a váriavél do JDesktop p/ classe das actions! Segue o código abaixo:

private void UsrAct() {       
    UsrAct ua = new UsrAct();
    [b]MainClass mclass = new MainClass();[/b] <--- Classe que ta meu JDesktopPanw
    [b]JDesktopPane jd = mclass.desktop[/b];  <--- Fiz uma referência a ele adicionando-o em uma variavel!
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    ua.setLocation((int) ((screenSize.width - ua.getWidth()) / 2),
                    (int)((screenSize.height - ua.getHeight()) / 2));
    [b]ua.setVisible(true);  <-- Setei o form que abre quando clico no menu como visible
    jd.add(ua);[/b]  <-- E o adicionei no meu JDesktopPane!
    try {
        ua.setSelected(true);
    } catch (java.beans.PropertyVetoException e) {}

A lógica não seria essa? Alguma idéia o que pode estar acontecendo?

Muito obrigado desde já a todos!

3 Respostas

robinsonbsilva

tenta criar um instancia única da sua classe

private MainClass mclass;

private void UsrAct() {

    UsrAct ua = new UsrAct();

    if(mclass == null)
        mclass = new MainClass(); <--- Classe que ta meu JDesktopPanw

    JDesktopPane jd = mclass.desktop; <--- Fiz uma referência a ele adicionando-o em uma variavel!
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    ua.setLocation((int) ((screenSize.width - ua.getWidth()) / 2),(int)((screenSize.height - ua.getHeight()) / 2));
    ua.setVisible(true); <-- Setei o form que abre quando clico no menu como visible
    jd.add(ua); <-- E o adicionei no meu JDesktopPane!
    try {
        ua.setSelected(true);
    } catch (java.beans.PropertyVetoException e) {
    } 
}
grlongo

Robson, muito obrigado pela dica! Depois para responder pois não quiz ficar chateando sem tentar mas acabou que por fim o erro continua!

Fiz o que vc mandou e nada!

Vou mandar os códigos dos 3 arquivos e se alguêm puder testar e ver o que acontece! Eu ja abaixei vários downloads de sistemas de InternalFrame e todos usam apenas 2 arquivos (1 para a main class e menu e o outro p/ o internal)

*Eu preciso que seja 3 (1 para a MainClass, 1 para o Menu e outro p/ o internalFrame! Aqui vão os sources deles:

MainClass_bak ->Main Classe

package libultra;

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class MainClass_bak {
    public MainClass_bak() {
    }

    JTextArea output;
    JScrollPane scrollPane;


    public Container createContentPane() {

        JPanel contentPane = new JPanel(new BorderLayout());
        contentPane.setOpaque(true);
        output = new JTextArea(5, 30);
        output.setEditable(false);
        scrollPane = new JScrollPane(output);
        contentPane.add(scrollPane, BorderLayout.CENTER);

        return contentPane;
    }

    private static void createAndShowGui() {

        MenuLayout1 mlay = new MenuLayout1();
        JFrame frame = new JFrame("Tela Principal");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setJMenuBar(mlay.createMenuBar());

        JFrame.setDefaultLookAndFeelDecorated(true);
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setUndecorated(false);


        //frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        createAndShowGui();
                    }
                });
    }
}

MenuLayout1 -> Classe que controla os menus e os Events

package libultra;

import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;

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

public class MenuLayout1 implements ActionListener {
    public MenuLayout1() {
    }

    public JMenuBar createMenuBar() {
        JMenuBar menuBar;
        JMenu menu;
        JMenuItem uact, exit, usr, docreg, per, art, edt, aut, kwords, dstt, hist, stt, bk, db, st, it, clt, tt, udit, cdu, ct, ureg, parm, top, abt;

        //Create the menu bar
        menuBar = new JMenuBar();

        //Build the first menu.
        menu = new JMenu("File");
        menu.setMnemonic(KeyEvent.VK_F);
        menu.getAccessibleContext().setAccessibleDescription("The only menu in this program that has menu items");
        menuBar.add(menu);

        uact = new JMenuItem("User Activation", KeyEvent.VK_U);
        uact.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));
        uact.getAccessibleContext().setAccessibleDescription("nothing yet");
        uact.setActionCommand("uact");
        menu.add(uact);


        exit = new JMenuItem("Exit", KeyEvent.VK_E);
        exit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2, ActionEvent.ALT_MASK));
        exit.getAccessibleContext().setAccessibleDescription("nothing yet");
        exit.setActionCommand("exit");
        menu.add(exit);

        //Build second menu in the menu bar.
        menu = new JMenu("Main Registers");
        menu.setMnemonic(KeyEvent.VK_M);
        menu.getAccessibleContext().setAccessibleDescription("This menu does nothing");
        menuBar.add(menu);


        usr = new JMenuItem("User Register", KeyEvent.VK_U);
        usr.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_1, ActionEvent.ALT_MASK));
        usr.getAccessibleContext().setAccessibleDescription("nothing yet");
        usr.setActionCommand("usr");
        menu.add(usr);

        docreg = new JMenuItem("Collection", KeyEvent.VK_C);
        docreg.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_4, ActionEvent.ALT_MASK));
        docreg.getAccessibleContext().setAccessibleDescription("nothing yet");
        docreg.setActionCommand("docreg");
        menu.add(docreg);

        per = new JMenuItem("Periodicals", KeyEvent.VK_P);
        per.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_5, ActionEvent.ALT_MASK));
        per.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(per);

        art = new JMenuItem("Articles", KeyEvent.VK_A);
        art.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_6, ActionEvent.ALT_MASK));
        art.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(art);


        menu = new JMenu("Extra Registers");
        menu.setMnemonic(KeyEvent.VK_X);
        menu.getAccessibleContext().setAccessibleDescription("This menu does nothing");
        menuBar.add(menu);

        edt = new JMenuItem("Editors", KeyEvent.VK_E);
        edt.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_7, ActionEvent.ALT_MASK));
        edt.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(edt);

        aut = new JMenuItem("Authors", KeyEvent.VK_A);
        aut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_8, ActionEvent.ALT_MASK));
        aut.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(aut);

        kwords = new JMenuItem("Key Words", KeyEvent.VK_K);
        kwords.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_9, ActionEvent.ALT_MASK));
        kwords.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(kwords);


        menu = new JMenu("Loans");
        menu.setMnemonic(KeyEvent.VK_L);
        menu.getAccessibleContext().setAccessibleDescription("This menu does nothing");
        menuBar.add(menu);


        menu = new JMenu("Control");
        menu.setMnemonic(KeyEvent.VK_C);
        menu.getAccessibleContext().setAccessibleDescription("This menu does nothing");
        menuBar.add(menu);

        dstt = new JMenuItem("Daily Statistics", KeyEvent.VK_D);
        dstt.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, ActionEvent.ALT_MASK));
        dstt.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(dstt);

        hist = new JMenuItem("Historic", KeyEvent.VK_H);
        hist.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, ActionEvent.ALT_MASK));
        hist.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(hist);

        stt = new JMenuItem("Statistic", KeyEvent.VK_S);
        stt.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.ALT_MASK));
        stt.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(stt);


        menu = new JMenu("Maintenance");
        menu.setMnemonic(KeyEvent.VK_T);
        menu.getAccessibleContext().setAccessibleDescription("This menu does nothing");
        menuBar.add(menu);

        bk = new JMenuItem("Backup", KeyEvent.VK_B);
        bk.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, ActionEvent.ALT_MASK));
        bk.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(bk);

        db = new JMenuItem("Database", KeyEvent.VK_D);
        db.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, ActionEvent.ALT_MASK));
        db.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(db);

        st = new JMenuItem("Source Table", KeyEvent.VK_S);
        st.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.ALT_MASK));
        st.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(st);

        clt = new JMenuItem("Collection Localization Table", KeyEvent.VK_C);
        clt.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, ActionEvent.ALT_MASK));
        clt.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(clt);

        it = new JMenuItem("Idiom Table", KeyEvent.VK_I);
        it.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, ActionEvent.ALT_MASK));
        it.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(it);

        tt = new JMenuItem("Type Table", KeyEvent.VK_T);
        tt.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.ALT_MASK));
        tt.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(tt);

        udit = new JMenuItem("UD Initials Table", KeyEvent.VK_U);
        udit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.ALT_MASK));
        udit.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(udit);

        cdu = new JMenuItem("CDU", KeyEvent.VK_U);
        cdu.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, ActionEvent.ALT_MASK));
        cdu.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(cdu);

        ct = new JMenuItem("Cutter", KeyEvent.VK_R);
        ct.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, ActionEvent.ALT_MASK));
        ct.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(ct);

        ureg = new JMenuItem("User Register", KeyEvent.VK_G);
        ureg.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.ALT_MASK));
        ureg.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(ureg);

        parm = new JMenuItem("Parameters", KeyEvent.VK_P);
        parm.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, ActionEvent.ALT_MASK));
        parm.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(parm);

        menu = new JMenu("Help");
        menu.setMnemonic(KeyEvent.VK_T);
        menu.getAccessibleContext().setAccessibleDescription("This menu does nothing");
        menuBar.add(menu);

        top = new JMenuItem("Topics", KeyEvent.VK_T);
        top.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, ActionEvent.ALT_MASK));
        top.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(top);

        abt = new JMenuItem("About", KeyEvent.VK_A);
        abt.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, ActionEvent.ALT_MASK));
        abt.getAccessibleContext().setAccessibleDescription("nothing yet");
        menu.add(abt);


        uact.setToolTipText("Activate new registered users");
        exit.setToolTipText("");
        usr.setToolTipText("Register new users");
        docreg.setToolTipText("Register items in the collection");
        per.setToolTipText("Register periodical in the collection");
        art.setToolTipText("Register Articles in the collection");
        edt.setToolTipText("Register editors in the system");
        aut.setToolTipText("Register authors inthe system");
        kwords.setToolTipText("Register Key Works in the system");
        dstt.setToolTipText("Daily Statistics Report");
        hist.setToolTipText("User Historic");
        stt.setToolTipText("Custom Statistics Report");
        bk.setToolTipText("System Backup");
        db.setToolTipText("DB Tools");
        st.setToolTipText("Source register table");
        it.setToolTipText("Idiom register table");
        clt.setToolTipText("Collection Localization Register table");
        tt.setToolTipText("Type register table");
        udit.setToolTipText("UD Initials Register table");
        cdu.setToolTipText("CDU");
        ct.setToolTipText("Cutter");
        ureg.setToolTipText("User Register Form");
        parm.setToolTipText("System Parameters - BE CAREFULL -");
        top.setToolTipText("Find help by topics");
        abt.setToolTipText("System Information");

        exit.addActionListener(this);
        uact.addActionListener(this);
        usr.addActionListener(this);
        docreg.addActionListener(this);


        return menuBar;
    }

    public void actionPerformed(ActionEvent e) {
        if ("uact".equals(e.getActionCommand())) {
            UsrAct();
        }
        if ("exit".equals(e.getActionCommand())) {
            quit();
        }
        if ("usr".equals(e.getActionCommand())) {
            UsrReg();
        }
        if ("colt".equals(e.getActionCommand())) {
            docreg();
        } else { //quit

        }
    }

    private void quit() {
        System.exit(0);
    }

    private void UsrAct() {
        Container con;
        UsrAct ua = new UsrAct();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        ua.setLocation((int)((screenSize.width - ua.getWidth()) / 2), 
                       (int)((screenSize.height - ua.getHeight()) / 2));
        ua.setVisible(true);       
        
    }

    private void UsrReg() {
        Rep ur = new Rep();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        ur.setLocation((int)((screenSize.width - ur.getWidth()) / 2), 
                       (int)((screenSize.height - ur.getHeight()) / 2));
        ur.setVisible(true);
    }

    private void docreg() {
        DocReg docreg = new DocReg();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        docreg.setLocation((int)((screenSize.width - docreg.getWidth()) / 2), 
                           (int)((screenSize.height - docreg.getHeight()) / 
                                 2));
        docreg.setVisible(true);
    }

}
UsrAct Exemplo de tela. Ela é acionada pelo menu FILE / USER ACTIVATION
package libultra;

import java.awt.Dimension;
import java.awt.Font;
import java.awt.Rectangle;

import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class UsrAct extends JInternalFrame {
    private JLabel jLabel1 = new JLabel();
    private JLabel jLabel2 = new JLabel();
    private JTextField jTextField1 = new JTextField();
    private JButton jButton1 = new JButton();
    private JButton jButton2 = new JButton();
    private JPasswordField jPasswordField1 = new JPasswordField();

    public UsrAct() {
        try {
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void jbInit() throws Exception {
        this.getContentPane().setLayout(null);
        this.setSize(new Dimension(345, 158));
        this.setTitle("User Activation");
        this.setClosable(true);
        this.setNextFocusableComponent(jTextField1);
        jLabel1.setText("User");
        jLabel1.setBounds(new Rectangle(40, 20, 65, 25));
        jLabel1.setFont(new Font("Times New Roman", 0, 18));
        jLabel2.setText("Password");
        jLabel2.setBounds(new Rectangle(40, 50, 85, 25));
        jLabel2.setFont(new Font("Times New Roman", 0, 18));
        jLabel2.setToolTipText("null");
        jTextField1.setBounds(new Rectangle(125, 20, 170, 20));
        jButton1.setText("Activate");
        jButton1.setBounds(new Rectangle(50, 85, 110, 25));
        jButton1.setFont(new Font("Tahoma", 1, 11));
        jButton2.setText("Desactivate");
        jButton2.setBounds(new Rectangle(175, 85, 110, 25));
        jButton2.setFont(new Font("Tahoma", 1, 11));
        jPasswordField1.setBounds(new Rectangle(125, 50, 170, 20));
        this.getContentPane().add(jPasswordField1, null);
        this.getContentPane().add(jButton2, null);
        this.getContentPane().add(jButton1, null);
        this.getContentPane().add(jTextField1, null);
        this.getContentPane().add(jLabel2, null);
        this.getContentPane().add(jLabel1, null);
    }
}

Muito Obrigado a todos desde já!

grlongo

Só p/ falar, se eu “mesclo” as classes e faço em uma classe só o JDesktop e as Actions funciona na boa!

Alguêm já fez esse sistema de JDesktop + JInternalFrames usando uma classe p/ as actions do menu e em outra o JDesktopPane?

Isso resolveria todo o problema.
Muito obrigado!

Criado 1 de agosto de 2008
Ultima resposta 13 de ago. de 2008
Respostas 3
Participantes 2