繁体   English   中英

Java GUI布局问题

[英]Java GUI layout problems

我正在编写一个小型Java GUI程序,但Java出现一些问题,导致布局不正确。 我最近没有做太多的Java GUI代码,所以我很难看清问题所在。

    final JFreeChart chart = createChart(dataset);
    final ChartPanel chartPanel = new ChartPanel(chart, false);
    chartPanel.setPreferredSize(new Dimension(500, 270));
    JPanel buttonPanel = new JPanel();
    buttonPanel.setPreferredSize(new Dimension(500,50));

    JButton toggleButton = new JButton("Toggle");
    final JTextField minRange = new JTextField("10");
    final JTextField maxRange = new JTextField("1000");
    JButton setLimits = new JButton("Set Limits");

    buttonPanel.add(toggleButton, BorderLayout.NORTH);
    buttonPanel.add(minRange, BorderLayout.SOUTH);
    buttonPanel.add(maxRange, BorderLayout.SOUTH);
    buttonPanel.add(setLimits);

JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, chartPanel, buttonPanel);
jsp.setDividerLocation(0.8);
setContentPane(jsp);

这里发生的是所有布局选项都被完全忽略了。 GUI组件正确显示,并且分隔线特别忽略了JFreeChart的首选大小,并将其压缩到框架顶部大约5%的空间。

除了拆分窗格不符合所需大小的问题外,您还使用BorderLayout常量,但尚未指定面板的布局(默认为FlowLayout)。

这个:

JPanel buttonPanel = new JPanel();

应该:

JPanel buttonPanel = new JPanel(new BorderLayout());

我相信,只有在“实现”拆分窗格后,才能在JSplitPane上使用浮动比例,否则您将获得零比例,因为它不知道它的大小。

也:

buttonPanel.add(minRange, BorderLayout.SOUTH);
buttonPanel.add(maxRange, BorderLayout.SOUTH);

BorderLayout只允许一个组件位于每个区域中,因此最小范围将永远不会出现,因为maxRange现在是“南”组件。 如果两者都需要,则需要将这两个组件放在另一个面板中,然后将该面板添加到南部。

也尝试设置最小尺寸。

请参阅: Java GUI问题

JSplitPane注意最小大小,而不是首选大小。 尝试简单地将setPreferredSize更改为setMinumumSize

Dan Dyer是正确的,您没有设置Layout。

您也可以通过buttonPanel.setLayout(new BorderLayout())

John Gardner是正确的,您将组件两次设置为BorderLayout.SOUTH

如果您还不了解MigLayout ,请同时查看。 它是我使用过的最“令人惊讶”的布局管理器。 它只是工作。 这需要一些学习,但是一旦掌握了语法就非常简单。

如果可以的话,我会避免使用SplitPane ...它非常挑剔

永远不要调用setPreferredSize()-它应该是一个计算。

例如,您的ButtonPanel设置为固定的首选大小。

如果添加I18N支持并且用户使用的语言本地化时间长,该怎么办? 如果用户调整框架大小怎么办?

请查看我有关布局管理器的文章,以获取有关如何真正使用它们的详细信息。 从1999年开始,但仍然适用:

http://java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr/

请享用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM