我只是想创建这个小模拟器。在一个gui中,我有两个主要组件 - 一张地图,占据了大部分窗户,一个控制面板位于右侧。现在,我想在窗口底部添加一个时间滑块(仅在地图下运行,而不是在控制面板下运行)。我可以在runner类(初始化主窗口)中执行它,但它应该在逻辑上属于控制面板 - 它会触发所有相关事件。有办法吗?我应该使用什么样的摇摆组件,我应该如何包装它们? (我尝试使用netbeans,但是,这是我第一次使用它,我没有运气)。
非常感谢你的帮助
答案 0 :(得分:1)
MiG layout或DesignGridLayout等布局管理器可以帮助您更好地布局控件。控件的布局是一回事,逻辑分离是另一回事。您可以将控制面板中的所有控件放在右侧,将底部的滑块放在同一逻辑单元的成员中。
答案 1 :(得分:1)
您可以使用BorderLayout非常简单地获得所需的结果; e.g。
JPanel pnl = new JPanel(new BorderLayout());
pnl.add(mapPnl, BorderLayout.CENTER);
pnl.add(controlPnl, BorderLayout.EAST);
pnl.add(timerPnl, BorderLayout.SOUTH);
如果您预计会有更多组件添加到您的顶级JPanel
,我建议您查看GridBagLayout
,因为它提供了更大的灵活性。
您的控件和计时器相关的事实与可视组件的布局无关。通常,您将在业务对象级别维护此关系; e.g。
Controller controller = new Controller();
JPanel controlPnl = new MyControlPanel(controller);
JPanel timerPnl = new MyTimerPanel(controller.getTimer());
答案 2 :(得分:0)
只需使用多个面板来控制不同的区域,如下所示:
JPanel centerContent = new JPanel(new BorderLayout());
centerContent.add(map, BorderLayout.CENTER);
centerContent.add(timeSlider, BorderLayout.SOUTH);
JPanel content = new JPanel(new BorderLayout());
content.add(controlPanel, BorderLayout.WEST);
content.add(centerContent, BorderLayout.CENTER);
使用这种方法,布局管理器 - 在这种情况下为java.awt.BorderLayout
- 负责调整包含控件的窗口的大小。