我有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);
}
我希望得到与照片相同的结果。如果有人可以引导我正确的方法。我应该使用哪种布局?
答案 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
中的位置。