Java嵌套布局

时间:2017-04-04 06:17:29

标签: java layout grid-layout gridlayoutmanager nestedlayout

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

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

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

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

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

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

BorderLayout在中心放置一个大组件,在边缘放置另外四个组件。 GridLayout就像一个表,为所有组件提供相等的空间,这不是你想要实现的。

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

答案 1 :(得分:0)

通过查看你的图片,我会按照here的说明使用GridBagLayout。

原因是GridBagLayout是使用多个面板时最简单的布局,它与基本矩阵的工作原理相同,可以定位UI元素,将它们完美地隔开,你可以只使用一个间隔,即空面板之间具有固定尺寸的布局。

另一方面,那里有许多精彩的ide,我更喜欢IntelliJ的想法,它有一个超级UI'生成器',并允许你按照你想要的方式空间你的UI。

祝你好运:)