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

时间:2018-12-29 15:49:15

标签: java swing layout-manager

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

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

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

enter image description here

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

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

我尝试使用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);
  }

我希望得到与照片相同的结果。如果有人可以引导我正确的方法。我应该使用哪种布局?

2 个答案:

答案 0 :(得分:1)

  

我设置了大小

您不应设置尺寸。

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

如果您要进行自定义绘制,则您的组件应实现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();

答案 1 :(得分:0)

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

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