Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javagui布局问题_Java_User Interface_Swing - Fatal编程技术网

javagui布局问题

javagui布局问题,java,user-interface,swing,Java,User Interface,Swing,我正在编写一个小的JavaGUI程序,我在Java方面遇到了一些问题,没有正确地布局。我最近没有编写太多Java GUI代码,所以我很难看到问题所在 final JFreeChart chart = createChart(dataset); final ChartPanel chartPanel = new ChartPanel(chart, false); chartPanel.setPreferredSize(new Dimension(500, 270));

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

尝试设置最小大小


请参阅:

也尝试设置最小大小


请参阅:

JSplitPane
注意最小尺寸,而不是首选尺寸。尝试将
setPreferredSize
更改为
setMinumSize

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

我认为在JSplitPane上使用浮动比例只能在拆分窗格“实现”后起作用,否则您得到的比例为零,因为它不知道它将有多大

此外:


BorderLayout只允许每个区域中有一个组件,因此min range将永远不会出现,因为maxRange现在是“南方”组件。如果你想同时使用这两个组件,你需要将这两个组件放在另一个面板中,然后将该面板添加到南部。

我认为在JSplitPane上使用浮动比例只能在拆分窗格“实现”后起作用,否则你会得到一个零比例,因为它不知道它会有多大

此外:


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

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

这:

应该是:

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

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

这:

应该是:

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

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

您也可以通过
buttonPanel.setLayout(newborderlayout())设置它。

John Gardner正确地将组件设置为
BorderLayout.SOUTH
两次

如果你还不知道,也可以去看看。这是我使用过的最不“令人惊讶”的布局管理器。它只是工作。这需要一些学习,但是一旦你理解了语法,就非常简单了


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

Dan Dyer是正确的,你没有设置布局

您也可以通过
buttonPanel.setLayout(newborderlayout())设置它。

John Gardner正确地将组件设置为
BorderLayout.SOUTH
两次

如果你还不知道,也可以去看看。这是我使用过的最不“令人惊讶”的布局管理器。它只是工作。这需要一些学习,但是一旦你理解了语法,就非常简单了

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

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

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

如果您添加了I18N支持,而用户使用的语言具有很长的本地化,该怎么办?如果用户调整了帧的大小会怎样

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

享受吧

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

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

如果您添加了I18N支持,而用户使用的语言具有很长的本地化,该怎么办?如果用户调整了帧的大小会怎样

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


享受吧

是的,这几乎是一个复制品。我们应该做一个jsplitpane标记,这样我们就不会再遇到这个问题了吗?真的吗?也许我们应该:)是的,这几乎是重复的。我们应该做一个jsplitpane标记,这样我们就不会再遇到这个问题了吗?真的吗?或许我们应该:)
JPanel buttonPanel = new JPanel(new BorderLayout());