Java嵌套布局

Java嵌套布局,java,layout,grid-layout,gridlayoutmanager,nestedlayout,Java,Layout,Grid Layout,Gridlayoutmanager,Nestedlayout,Hy,我正在尝试创建一个布局如下图所示的窗口: 我的ide使用面板和嵌套布局,类似于: 这是到目前为止我的代码,但它不能正常工作。我应该怎么做,我应该做什么不同的事情,或者我的基本概念是错误的 package layout; import java.awt.FlowLayout; import java.awt.GridLayout; import javax.swing.*; import models.People; public class DetailWindow extends

Hy,我正在尝试创建一个布局如下图所示的窗口:

我的ide使用面板和嵌套布局,类似于:

这是到目前为止我的代码,但它不能正常工作。我应该怎么做,我应该做什么不同的事情,或者我的基本概念是错误的

package layout;

import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.*;
import models.People;

public class DetailWindow extends JFrame{

public DetailWindow(People newPeople) {
    JFrame frame = new JFrame("Detail Window");
    
    JPanel mainPanel = new JPanel(new GridLayout(1,2));
    frame.add(mainPanel);

    JPanel leftPanel = new JPanel(new GridLayout(2,1));
    frame.add(leftPanel);
    
    JPanel rightPanel = new JPanel(new GridLayout(3,1));
    frame.add(rightPanel);
    
    JPanel pictureHolder = new JPanel(new FlowLayout());
    pictureHolder.add(new JLabel(new ImageIcon(newPeople.getPic())));
    leftPanel.add(pictureHolder);
    
    JPanel infoHolder = new JPanel(new GridLayout(6,1));
    infoHolder.add(new JTextField(newPeople.getLb_name()));
    infoHolder.add(new JTextField(newPeople.getName()));
    infoHolder.add(new JTextField(newPeople.getLb_occup()));
    infoHolder.add(new JTextField(newPeople.getOccup()));
    infoHolder.add(new JTextField(newPeople.getLb_BD()));
    infoHolder.add(new JTextField(newPeople.getBD()));
    leftPanel.add(infoHolder);

    
    rightPanel.add(new JTextField(newPeople.getName()));
    rightPanel.add(new JTextField(newPeople.getOccup()));
    rightPanel.add(new JTextField(newPeople.getDetail()));
    
    frame.pack();
    frame.setSize(600, 400);
    frame.setLocationRelativeTo(null); // Center the frame
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.show();
  }
}
(People是一个自定义类,我主要调用DetailWindow构造函数)


提前谢谢你的帮助

如果右侧总是有两个短文本和一个长文本,请使用右侧的面板。将大文本添加为BorderLayout.CENTER,并为顶部的两个较短文本再制作一个面板(可以是GridLayout)。将第二个面板添加为BorderLayout.NORTH

BorderLayout在中心放置一个大构件,在边缘放置四个其他构件。GridLayout就像一个表,为所有组件提供相等的空间,这不是您试图实现的


如果需要垂直放置多个组件,每个组件仅占用所需空间,则需要按要求使用BoxLayout。

如果右侧始终有两个短文本和一个长文本,请使用右侧的面板。将大文本添加为BorderLayout.CENTER,并为顶部的两个较短文本再制作一个面板(可以是GridLayout)。将第二个面板添加为BorderLayout.NORTH

BorderLayout在中心放置一个大构件,在边缘放置四个其他构件。GridLayout就像一个表,为所有组件提供相等的空间,这不是您试图实现的


如果需要垂直放置多个组件,每个组件仅占用所需空间,则需要按照要求使用BoxLayout。

通过查看图片,我将使用GridBagLayout,如前所述

原因是GridBagLayout是处理多个面板时最简单的布局,它与基本矩阵一样工作,用于定位UI元素,要将它们完美地隔开,您只需使用间隔符,即面板之间具有固定大小的空布局

另一方面,有很多优秀的ide,我更喜欢IntelliJ idea,它有一个超级UI“生成器”,可以让你按照你想要的方式来分配你的UI


祝你好运:)

通过看你的照片,我会使用GridBagLayout,如前所述

原因是GridBagLayout是处理多个面板时最简单的布局,它与基本矩阵一样工作,用于定位UI元素,要将它们完美地隔开,您只需使用间隔符,即面板之间具有固定大小的空布局

另一方面,有很多优秀的ide,我更喜欢IntelliJ idea,它有一个超级UI“生成器”,可以让你按照你想要的方式来分配你的UI

祝你好运:)