java gui - 重叠面板?

时间:2009-07-23 10:39:30

标签: java user-interface

我只是想创建这个小模拟器。在一个gui中,我有两个主要组件 - 一张地图,占据了大部分窗户,一个控制面板位于右侧。现在,我想在窗口底部添加一个时间滑块(仅在地图下运行,而不是在控制面板下运行)。我可以在runner类(初始化主窗口)中执行它,但它应该在逻辑上属于控制面板 - 它会触发所有相关事件。有办法吗?我应该使用什么样的摇摆组件,我应该如何包装它们? (我尝试使用netbeans,但是,这是我第一次使用它,我没有运气)。

非常感谢你的帮助

3 个答案:

答案 0 :(得分:1)

MiG layoutDesignGridLayout等布局管理器可以帮助您更好地布局控件。控件的布局是一回事,逻辑分离是另一回事。您可以将控制面板中的所有控件放在右侧,将底部的滑块放在同一逻辑单元的成员中。

答案 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 - 负责调整包含控件的窗口的大小。