Java GUI布局问题

时间:2009-02-20 20:01:45

标签: java user-interface swing

我正在编写一个小型的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%的空间。

6 个答案:

答案 0 :(得分:4)

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

此:

JPanel buttonPanel = new JPanel();

应该是:

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

答案 1 :(得分:2)

我相信在JSplitPane上使用浮动比例只有在拆分窗格“实现”时才会起作用,否则你会得到零比例,因为它不知道它会有多大。

也:

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

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

答案 2 :(得分:0)

尝试设置最小尺寸。

请参阅:Java GUI Problems

答案 3 :(得分:0)

JSplitPane会注意最小尺寸,而不是首选尺寸。只需将setPreferredSize更改为setMinumumSize

即可

答案 4 :(得分:0)

Dan Dyer是对的,你没有设置布局。

您也可以按buttonPanel.setLayout(new BorderLayout())

进行设置

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

如果您还不知道,请查看MigLayout。它是我用过的最“令人惊讶”的布局管理器。它只是有效。这需要一些学习,但是一旦你克服了语法就会非常直接。

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

答案 5 :(得分:0)

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

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

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

查看我关于布局管理器的文章,了解有关如何使用它们的详细信息。这是从1999年开始,但仍然适用:

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

享受!