javagui布局问题
我正在编写一个小的JavaGUI程序,我在Java方面遇到了一些问题,没有正确地布局。我最近没有编写太多Java GUI代码,所以我很难看到问题所在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));
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());