Java Swing两个独立的框架

cclgggtu  于 2023-11-15  发布在  Java
关注(0)|答案(3)|浏览(101)

我有我的应用程序的主框架,我想有另一个框架登录。所以我写了两个类:一个主类和LoginFrame类。

/*Imported classes*/

public class Main {

    private JFrame frame;
    private LoginFrame loginFrame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Main window = new Main();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public Main() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame("Main Frame");
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        
        JPanel mainPanel = new JPanel();
        mainPanel.setBounds(10, 10, 426, 243);
        frame.getContentPane().add(mainPanel);
        mainPanel.setLayout(null);
        
        loginFrame = new LoginFrame("Login...");
        loginFrame.setVisible(true);
        loginFrame.pack();
        
    }
}

个字符
我得到的是两个画面:


的数据
当我打开登录框架时,什么都没有(按钮和文本字段)。问题是什么?这是实现登录框架的正确方法吗?
我希望有两个不同的框架,主要的一个空。第二个有两个字段,一个是用户名,另一个是密码和两个按钮。

nwlqm0z1

nwlqm0z11#

当我打开登录框架时,什么都没有(按钮和文本字段)。
当然了
问题出在哪里?
您永远不要向LoginFrame中添加任何组件,而是创建一个 * 单独的 * JFrame,向其中添加一些组件,然后不对它做任何进一步的操作。

83qze16e

83qze16e2#

loginFrame.pack();

字符串
pack()语句将使框架以其首选大小显示。
由于您使用的是空布局,因此框架没有首选大小。
解决方案是不要使用空布局。Swing被设计用于布局管理器。
阅读Layout Managers上的Swing教程
另外,请注意,框架的内容窗格是JPanel,因此无需创建单独的面板来添加到框架中。
阅读Swing基础教程。

xv8emn3q

xv8emn3q3#

信用卡John Bollinger on the original answer
你做错的是在LoginFrame类内部的框架上添加组件。我在说什么呢?

JPanel panel = new JPanel();
panel.setBounds(0, 10, 426, 243);
frame.getContentPane().add(panel);
panel.setLayout(null);

字符串
你要把你的面板添加到什么里面?好吧,JFrame frame在你的LoginFrame类里面!
现在我要你看这里

loginFrame = new LoginFrame("Login...");
loginFrame.setVisible(true);
loginFrame.pack();


你在做什么?登录框!
你犯的第二个错误是使用loginFrame.pack(),但阅读camickr's answer了解更多。
你怎么解决这个问题?你有两个简单的选择。
选项A.在LoginFrame中为frame创建一个getter
好吧,这是相当直接的,它的工作,创建一个getter的frame和而不是使用loginFrame.setVisible(true);使用loginFrame.getFrame().setVisible(true);
选项B.删除帧
删除框架对象。将frame.getContentPane().add(panel);替换为getContentPane().add(panel);,这将使用this.getContentPane()...,这意味着您将使用LoginFrame
最重要的是删除pack()线!
x1c 0d1x的数据
这应该会帮助你,你会得到这样的东西;)我相信这是你想要的。

相关问题