从另一个类访问JFrame

时间:2015-12-17 10:37:58

标签: java swing jframe

如何从其他类访问JFrame? 我正在尝试将JLabel(jlabel_title)添加到我的JFrame(框架)。

public class Frame_Main
{
    public static void createWindow()
    {
        JFrame frame = new JFrame();
        frame.setPreferredSize(new Dimension(400,250));
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Frame_Menu frame_menu = new Frame_Menu();
        frame.setMenuBar(frame_menu.getMenubar());
        frame.setLayout(new BorderLayout());
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        createTitle();
    }

    public static void createTitle()
    {
        //IF abfrage integrierieren ob jlabel leer ist
        JLabel jlabel_title = new JLabel("test");
        jlabel_title.setBackground(Color.BLUE);
        jlabel_title.setFont(new Font("Segoe UI", Font.BOLD, 20));
        jlabel_title.setVisible(true);

错误显示在此处:

        Frame_Main.createWindow(frame).add(jlabel_title, BorderLayout.NORTH);
    }
}

1 个答案:

答案 0 :(得分:3)

首先,除非确实需要,否则不要使用静态方法(这里没有理由这样做)。

然后,将JFrame作为成员添加到您的班级中 - 然后可以通过班级方法访问它:

public class Frame_Main {
    private JFrame frame = new JFrame();

    public void createWindow() {
    // ...
    }


    public void createTitle() {
    // ...
        frame.add(jlabel_title, BorderLayout.NORTH);
    }
}

在调用代码中,您需要创建Frame_Main类的实例并调用createWindow()方法:

public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
           Frame_Main mainWindow = new Frame_Main();
           mainWindow.createWindow();
        }
    });
}

(您可以将createWindow()更改为类似initializeWindow()的内容,因为这是该方法实际执行的操作)