无法从我的主类中的另一个类调用JPanel

时间:2014-09-22 19:06:48

标签: java swing

我有问题。我有2个类(MainFrame和MainContacts)我想获得在MainContacts类中声明的面板,并在单击菜单中的操作时显示它。

当我现在点击时,没有任何事情发生,就像点击之前一样。我不知道问题出在哪里

我的代码:

public class MainFrame {

JFrame mainFrame = new JFrame("Team Helper");
JPanel mainPanel = new JPanel();

JMenuBar mainMenuBar = new JMenuBar();
    JMenu file = new JMenu("Plik");
        JMenuItem close = new JMenuItem("Zakoncz");

    JMenu tools = new JMenu("Narzedzia");
        JMenuItem contacts = new JMenuItem("Kontakty");

    JMenu help = new JMenu("Pomoc");
        JMenuItem information = new JMenuItem("O programie"); 

public void runContactForm()
{   
    new MainContacts();
}

public MainFrame(){

    mainFrame.setJMenuBar(mainMenuBar);


    mainMenuBar.add(file);
        file.add(close);

        close.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                mainFrame.dispose();
            }
        });

    mainMenuBar.add(tools);
        tools.add(contacts);

        contacts.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                runContactForm();
            }
        });

    mainMenuBar.add(help);  
        help.add(information);

    mainFrame.add(mainPanel);

    mainFrame.setVisible(true);
    mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    mainFrame.setSize(1600, 800);
    mainFrame.setResizable(false);
}

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            new MainFrame();

        }
    });

}

}

第二课:

public class MainContacts extends MainFrame {

JPanel leftPanel = new JPanel();
JPanel rightPanel = new JPanel();

JButton show = new JButton("Pokaż");
JButton addContact = new JButton("Dodaj kontakt");

public MainContacts() {

    leftPanel.add(show);
    leftPanel.add(addContact);

}

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            new MainContacts();

        }
    });

}

}

2 个答案:

答案 0 :(得分:0)

在您的按钮处理程序中,调用MainContacts.main而不是直接实例化

contacts.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {

        MainContacts.main(new String[] {});
    }
});

答案 1 :(得分:0)

我找到了调用JPanel的解决方案。 我将mainPanel更改为“protected”并立即写入我看到“MainFrame”中的元素。我添加到mainPanel leftPanel及其作品。

第一项任务,完成。

下一个问题,当我调用constoructor时。它不在同一帧中工作,是添加了leftPanel打开新帧。

以下代码:

public class MainFrame {

JFrame mainFrame = new JFrame("Team Helper");
protected JPanel mainPanel = new JPanel();

JMenuBar mainMenuBar = new JMenuBar();
    JMenu file = new JMenu("Plik");
        JMenuItem close = new JMenuItem("Zakoncz");

    JMenu tools = new JMenu("Narzedzia");
        JMenuItem contacts = new JMenuItem("Kontakty");

    JMenu help = new JMenu("Pomoc");
        JMenuItem information = new JMenuItem("O programie"); 

public void runMainContact()
{
    new MainContacts(); 
}

public MainFrame(){

    mainFrame.setJMenuBar(mainMenuBar);

    mainMenuBar.add(file);
        file.add(close);

        close.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                mainFrame.dispose();
            }
        });

    mainMenuBar.add(tools);
        tools.add(contacts);

        contacts.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub

                runMainContact();
            }
        });

    mainMenuBar.add(help);  
        help.add(information);


    mainFrame.add(mainPanel);

    mainFrame.setVisible(true);
    mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    mainFrame.setSize(1600, 800);
    mainFrame.setResizable(false);
}

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            new MainFrame();

        }
    });

}


}

第二课:

public class MainContacts extends MainFrame {

protected JPanel leftPanel = new JPanel();
JPanel rightPanel = new JPanel();

JButton show = new JButton("Pokaż");
JButton addContact = new JButton("Dodaj kontakt");

public MainContacts() {

    mainPanel.add(leftPanel);
    leftPanel.add(show);
    leftPanel.add(addContact);

}   

}