首页 > 解决方案 > 如何将两个视图堆叠在一起?

问题描述

我有 3 个视图,playView、gameView 和 timeView。

gameView 是左上角的块。timeView 是左下块,playView 是右块。

这是我需要重新制作的程序的照片。

在此处输入图像描述

我应该如何将这两个视图堆叠在一起。然后是这两个右侧的另一个视图。

如您所见,左下角的块比左上角的块大一点。

我尝试过使用 GridLayout 和 BoxLayout 但这些似乎都不起作用。

这是我尝试过的。它确实有效,但左侧两个块的大小相同。

    public void setGameView(GameView gameView, PlayView playView,TimeView timeView) {
    this.gameView = gameView;
    this.playView = playView;
    this.timeView = timeView;

    JPanel subPanel = new JPanel(new BoxLayout(this, BoxLayout.Y_AXIS));
    subPanel.add(gameView);
    subPanel.add(timeView);

    this.add(playView, BorderLayout.EAST);
    this.add(subPanel, BorderLayout.WEST);
  }

我想得到与照片相同的结果。如果有人可以引导我正确的方式。我应该使用什么布局?

标签: javaswinglayout-manager

解决方案


我设置尺寸

你不应该设置大小。

如果您在面板上使用组件,则每个布局管理器将确定首选尺寸。

如果您正在执行自定义绘制,那么您的组件应该实现该getPreferredSize()方法,以便布局管理器可以完成他们的工作。

当我使用 BoxLayout 时,我无法在左侧放置两个组件

JPanel subPanel = new JPanel(new BoxLayout(this, BoxLayout.Y_AXIS));
subPanel.add(gameView);
subPanel.add(timeView);

您设置了错误的面板来使用 BoxLayout。

代码应该是:

//JPanel subPanel = new JPanel(new BoxLayout(this, BoxLayout.Y_AXIS));
JPanel subPanel = new JPanel();
subPanel.setLayout(new BoxLayout(subPanel, BoxLayout.Y_AXIS));

或者更简单的方法是起诉Box班级:

Box subpanel = Box.createVerticalBox();

推荐阅读