1

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

布局

我的想法是使用类似的面板和嵌套布局:

布局2

到目前为止,这是我的代码,但它无法正常工作。我该怎么做,我该怎么做不同,甚至我的基本概念是错误的?

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 构造函数)

我在这里先向您的帮助表示感谢!

4

2 回答 2

1

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

BorderLayout 将一个大组件放在中心,另外四个放在边缘。GridLayout 就像一张桌子,为所有组件提供相等的空间,这不是您尝试实现的。

如果您需要垂直放置多个组件,每个组件只占用所需的空间,您需要按照此处的要求使用 BoxLayout 。

于 2017-04-04T06:29:52.593 回答
1

通过查看您的图片,我将使用此处解释的 GridBagLayout 。

这样做的原因是 GridBagLayout 是使用多个面板时最简单的布局,它与基本矩阵的工作原理相同,用于定位 UI 元素,要完美地分隔它们,您可以使用间隔器,即带有面板之间的固定尺寸。

另一方面,那里有很多出色的 ide,我更喜欢 IntelliJ 的想法,它有一个超级 UI '生成器',可以让你按照你想要的方式来划分你的 UI。

祝你好运 :)

于 2017-04-04T06:51:02.133 回答