java - java 布局的问题

标签 java swing

我曾经有一个包含 2 个组件的 jframe,每个组件占据一半的宽度和全部的高度: splitscreen1

我通过 2 列 1 行的网格布局实现了这一点,效果很好。尽管现在我想在右侧的组件下方添加第三个组件: enter image description here

有人知道我如何实现这一目标吗?

最佳答案

您可以尝试嵌套一些JPanel,例如:

有一个带有 FlowLayout 的主 Pane ,它将容纳左 Pane 和右 Pane 。

右侧 Pane 有一个 BoxLayoutGridLayout 来容纳顶部和底部 Pane 。

在下面的示例代码中给出以下输出

enter image description here

我添加了一些边框颜色,以便您可以看到它是如何工作的,我添加了一些标签,因为我懒得重写每个 JPanelgetPreferredSize(),但我认为这会让您了解如何从这里继续下去。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class LayoutExample {
    private JFrame frame;
    private JPanel pane;
    private JPanel leftPane;
    private JPanel rightPane;
    private JPanel topPane;
    private JPanel bottomPane;
    public static void main (String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new LayoutExample().createAndShowGui();
            }
        });
    }

    public void createAndShowGui() {
        frame = new JFrame("Layout Example");
        pane = new JPanel();
        leftPane = new JPanel() {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(200, 300); 
            }
        };
        rightPane = new JPanel() {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(200, 300);
            }
        };
        topPane = new JPanel();
        bottomPane = new JPanel();

        pane.setLayout(new FlowLayout());
        rightPane.setLayout(new GridLayout(2, 1, 5, 5));

        rightPane.add(topPane);
        rightPane.add(bottomPane);

        pane.add(leftPane);
        pane.add(rightPane);
        pane.setBorder(BorderFactory.createLineBorder(Color.green));
        leftPane.setBorder(BorderFactory.createLineBorder(Color.red));
        topPane.setBorder(BorderFactory.createLineBorder(Color.black));
        bottomPane.setBorder(BorderFactory.createLineBorder(Color.magenta));

        frame.setContentPane(pane);
        frame.pack();
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}
<小时/>

注意:为了在上面的示例中在左右 Pane 上获得相同的尺寸,我必须重写 getPreferredSize() 方法,这是因为我使用了 FlowLayout,在这种情况下,为了避免这样做,最好使用 @LukkasRotter 在下面的答案中给出的 2 个建议中的任何一个。

关于java - java 布局的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39048263/

相关文章:

java - 如何访问在 java swing 中运行时实例化的对象的事件监听器

java - 如何在 NetBeans 中为 GridBagLayout 设置 "columnWeights"和 "rowWeights"?

java - 如何使用数据库在java swing gui中显示特定值?

java - 传递和修改全局数组

java - Glassfish 记录日期和夏令时?

java - 按钮图标问题,Java 8-Queens 谜题

java - 如何使 JFrame 的大小具有精确的像素数?

java - DynamicReports 不在页面开始处打印列标题

java - App Engine 上的 Jersey 设置

java - 内部类事件处理程序无法访问顶级类字段。为什么?