Java 如何实现理想的布局?

Java 如何实现理想的布局?,java,swing,Java,Swing,我正在尝试创建这个布局 对于一个在Java8中使用Swing的项目,但是由于Swing是我从未学过的东西,我真的很难尝试设置布局。我已经尽力了,但我就是不明白这一点。我不认为我会对窗口的后端功能有任何问题,我只是不能让它看起来像我需要的那样。解决复杂计算任务的一个常见策略是将它们分解为小的、定义良好的可管理任务。分而治之 这也适用于gui:将设计分解为小的、易于布局的容器。 在这种情况下,考虑将设计分为4个区域(JBAND)嵌套在主JPANS:中。 这个基本布局可以让您开始,可以这样实现:

我正在尝试创建这个布局


对于一个在Java8中使用Swing的项目,但是由于Swing是我从未学过的东西,我真的很难尝试设置布局。我已经尽力了,但我就是不明白这一点。我不认为我会对窗口的后端功能有任何问题,我只是不能让它看起来像我需要的那样。

解决复杂计算任务的一个常见策略是将它们分解为小的、定义良好的可管理任务。分而治之
这也适用于gui:将设计分解为小的、易于布局的容器。 在这种情况下,考虑将设计分为4个区域(JBAND)嵌套在主JPANS:

中。

这个基本布局可以让您开始,可以这样实现:

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Gui {

    private final String text ="Growing ";
    private JPanel grid;
    private JFrame f;

    Gui() {
        creategui();
    }

    void creategui(){

        f = new JFrame("Hexagon Cross For Less");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationRelativeTo(null);
        f.setLayout(new BoxLayout(f.getContentPane(),BoxLayout.Y_AXIS));

        JPanel primes = new JPanel();
        primes.setPreferredSize(new Dimension(1000,120));
        primes.setBackground(Color.CYAN);
        f.add(primes);

        JPanel xFiles = new JPanel();
        xFiles.setPreferredSize(new Dimension(1000,120));
        xFiles.setBackground(Color.YELLOW);
        f.add(xFiles);

        JPanel actions = new JPanel();
        actions.setPreferredSize(new Dimension(1000,120));
        actions.setBackground(Color.GREEN);
        f.add(actions);

        JPanel status = new JPanel();
        status.setPreferredSize(new Dimension(1000,40));
        status.setBackground(Color.LIGHT_GRAY);
        f.add(status);

        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        new Gui();
    }
}
它生成以下布局:

它可以通过在单独的类中表示每个不同的区域(
JPanel
)来更好地构造
以下代码生成完全相同的布局(它是一个单独的文件mre。将其复制到
Gui.java
并运行):

若要继续,请应用相同的技术并定义4个子面板中每个面板的布局

动作的设计可以是:


提示:
prime
CrossFiles
具有完全相同的布局

欢迎来到堆栈溢出。请学习如何使用堆栈溢出,并阅读如何提高问题的质量。您目前没有提出任何问题。请在您的帖子中添加问题和问题的详细描述。您可能需要添加一个来显示您的问题。我建议您可以使用WindowBuilder或任何其他基于GUI的软件来拖放您需要的ui元素。它将加快您的项目,您可以将更多精力放在后端—不要使用IDE进行拖放。最后,您将花费时间学习IDE而不是学习Java/Swing,如果您迁移到另一个IDE,代码将无法维护。了解如何使用布局管理器,然后使用不同的布局管理器将布局逻辑分解为不同的面板。好吧,您还没有发布显示您所尝试的代码。因此,首先简化程序,尝试用第一个面板创建一个框架。我建议您可以轻松使用GridBagLayout。把你试过的东西贴出来,也许有人会帮你改正。我们不会为您编写代码。
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Gui {

    private final String text ="Growing ";
    private JPanel grid;
    private JFrame f;

    Gui() {
        creategui();
    }

    void creategui(){

        f = new JFrame("Hexagon Cross For Less");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationRelativeTo(null);
        f.add(new MainPane());
        f.pack();
        f.setVisible(true);
    }

    public static void main(String[] args) {
        new Gui();
    }
}

class MainPane extends JPanel{

    MainPane() {
        setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
        add(new Primes());
        add(new CrossFiles());
        add(new Actions());
        add(new Status());
    }
}

class Primes extends JPanel{
    Primes() {
        setPreferredSize(new Dimension(1000,120));
        setBackground(Color.CYAN);
    }
}

class CrossFiles extends JPanel{
    CrossFiles() {
        setPreferredSize(new Dimension(1000,120));
        setBackground(Color.YELLOW);
    }
}

class Actions extends JPanel{
    Actions() {
        setPreferredSize(new Dimension(1000,120));
        setBackground(Color.GREEN);
    }
}

class Status extends JPanel{
    Status() {
        setPreferredSize(new Dimension(1000,40));
        setBackground(Color.LIGHT_GRAY);
    }
}