java - 如何将两个视图堆叠在一起?
问题描述
我有 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);
}
我想得到与照片相同的结果。如果有人可以引导我正确的方式。我应该使用什么布局?
解决方案
我设置尺寸
你不应该设置大小。
如果您在面板上使用组件,则每个布局管理器将确定首选尺寸。
如果您正在执行自定义绘制,那么您的组件应该实现该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();
推荐阅读
- python - 错误:“浮动”对象不能解释为索引
- php - 如何在 SETAPDF 的受密码保护的 PDF 中使用散列密码?
- android - E/RecyclerView:没有附加适配器;跳过布局——Kotlin Billing
- chart.js - Chartjs 不显示来自动态存储变量的数据
- c++ - 我可以在编译时初始化对象的 C 风格函数指针,以便它调用对象的成员函数吗?
- javascript - 两个不同的命名空间连接到同一个事件
- c# - 即使使用 Dispatcher WPF,也必须在与 DependencyObject 相同的线程上创建 DependencySource
- mysql - springboot/jpa/mysql => com.sun.proxy.$Proxy68.saveAndFlush(Unknown Source) 的运行时错误~[na:na]
- javascript - 使用 useRef 挂钩将普通 JS 转换为 React.js
- asp.net - 我如何在我的 asp.net MVC 核心 Web 应用程序中引用静态文件