Java GUI 全屏 window 内部较小 window

Java GUI FullScreen window with smaller window inside

我正在开发 Java 桌面应用程序。它使用 MySQL 数据库来存储所有数据等。我使用 swing 作为 GUI。

此应用程序的 GUI 布局如下:

  1. Main Window 占据整个屏幕尺寸(图像在 背景)
  2. 内部 Window 800 x 600 居中于 Main Window(包含可以在两者之间切换的当前内容 在应用程序中使用菜单 and/or 事件。

LoginPanel.java:

import javax.swing.*;
import java.awt.*;

public class LoginPanel {

    private JPanel loginPanel;

    public void loginForm()
    {
        JButton loginSubmit = new JButton("Login");

        loginPanel = new JPanel();
        loginPanel.add(loginSubmit);
        loginPanel.setSize(800, 600);
    }

    public JComponent getGUI() 
    {
        return loginPanel;
    }

    public static void main(String[] args)
    {

    }


}

Main.java:

import javax.swing.*;
import java.awt.*;

public class Main {

    public static void main(String[] args)
    {
        JFrame mainFrame;
        mainFrame = new JFrame();
        mainFrame.setLayout(new BorderLayout());
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setTitle("Caledonian Library System");     
        LoginPanel loginObj = new LoginPanel();
        mainFrame.add(loginObj.getGUI());
        mainFrame.pack();
        mainFrame.setVisible(true);      
    }

}

我应该使用盒子布局吗?有什么建议么?

好的,我刚刚 运行 了一个测试程序,并且已经达到了你想要的结果。我使用了 GridBagLayout,它默认居中到它添加到的容器中。它不会与 JFrame 中内置的边框或其他按钮一起显示(但如果您以后愿意,可以添加边框)。

JFrame mainframe = new JFrame();
JPanel mainPanel = new JPanel();
GridBagLayout gridLayout = new GridBagLayout();
mainPanel.setLayout(gridLayout);

//GridBagConstraints allow you to set various features of the way the components appear
//in the grid. You can set this up as you wish, but defaults are fine for this example
GridBagConstraints gridConstraints = new GridBagConstraints();

//Just using FlowLayout as a test for now
JPanel centerPanel = new JPanel(new FlowLayout());
centerPanel.add(new JLabel("Hello"));
centerPanel.add(new JLabel("Centered"));

mainPanel.add(centerPanel, gridConstraints);

mainFrame.add(mainPanel);

如果您发现居中面板侧面的 space 没有被使用,而您希望它被使用,您可以尝试将 mainPanel 嵌套在另一个使用 BorderLayout 的面板中,确保它在 BorderLayout.CENTER.

在这个例子中,我没有费心去改变默认的 GridBagConstraints,因为这个演示没问题。但是,您可以根据需要对其进行编辑,然后应用于添加到 GridBagLayout 的每个组件,确保在每个 mainPanel.add() 中包含 GridBagConstraints 对象。查看 GridBagLayout tutorials 以获得一些有用的信息。

当然,如果您希望在中心放置更多组件而不是主组件 window,您可以简单地将它们添加到 mainPanel(确保更改 GridLayout 中的位置)。有很多方法可以实现你想要的,但这真的取决于你觉得什么看起来不错。布局管理器将为您完成所有调整大小的工作。