如何将两个视图堆叠在一起?

How can I stack two views on top of each other?

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

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

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

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

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

我试过使用 GridLayout 和 BoxLayout,但其中 none 似乎有效。

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

    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);
  }

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

BorderLayout 中,如果没有元素占据特定边框,CENTER 中的面板将延伸到父元素的边缘。

在您的情况下,您的 gamePanel 应该放在 CENTER 中,而不是 EAST。您的子面板应保持在 WEST.

中的位置

I set the size

您不应该设置尺寸。

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

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

when I use BoxLayout I am not able to place two components on the left side

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 class:

Box subpanel = Box.createVerticalBox();