【发布时间】:2014-05-06 11:41:33
【问题描述】:
我正在做一个原型来展示绘画程序的一些基本功能。现在,窗口如下所示:
该窗口由一个带有垂直 BoxLayout 的面板组成,在其中,有一个自定义图像控件和另一个带有包含所有按钮的 FlowLayout 的面板。
问题是我必须指定按钮面板的高度(以 100 像素为单位)。如果我删除该行,窗口将如下所示:
但是,如果我只指定宽度,并为高度写一个 0,我会得到:
我希望布局自己确定按钮面板的正确高度。这是生成第一张图片的代码:
public void createAndShowGui(){
JFrame.setDefaultLookAndFeelDecorated(true);
setTitle("SimplePaint");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
//Main container layout.
BoxLayout mainLayout = new BoxLayout(getContentPane(), BoxLayout.Y_AXIS);
getContentPane().setLayout(mainLayout);
drawingPanel = new JPanel();
drawingPanel.setLayout(null);
drawingPanel.setPreferredSize(new Dimension(width, height));
TextBox editor = new TextBox();
drawingPanel.add(editor);
editor.setVisible(false);
canvasControl = new DrawableCanvas(editor);
drawingPanel.add(canvasControl);
canvasControl.setBounds(0, 0, width, height);
getContentPane().add(drawingPanel);
drawingSurface = canvasControl.getDrawingSurface();
//Buttons layout.
FlowLayout buttonsLayout = new FlowLayout();
JPanel buttonsPanel = new JPanel(buttonsLayout);
buttonsPanel.setPreferredSize(new Dimension(width, 100)); // <-- Not in this way
//Buttons creation...
pack();
}
提前致谢。
【问题讨论】:
-
您可以尝试添加多个带有 flowlayout 的面板,每个面板最多四个按钮,然后将其添加到带有 gridlayout 的buttonsPanel
-
我认为 GUI 可以更好地使用工具栏中的按钮,并且图像/自定义绘画在滚动窗格中以
GridBagLayout为中心。为了尽快获得更好的帮助,请发布MCVE(最小完整且可验证的示例)。 -
是的,没错。实际上,问题可以简化为:我不知道如何使 FlowLayout 垂直(而不是水平)增长,足以显示所有按钮。我是一名 .NET 开发人员,这是我第一次必须在 Java 中使用布局。在 .NET 中,问题是使用 StackPanel 垂直指定宽度来解决的。之后,只需要添加图像控件,以及另一个包含按钮的水平 StackPanel,然后瞧,按钮会逐行显示(并非全部在一行中,从而使整个窗口变宽)。
-
提示:添加@Arvind(或重要的
@)以通知此人有新评论。 -
是的,Andrew Thompson,我试图与您一起做,但我做不到(它没有将您的用户显示为链接,所以我认为它不起作用)。不管怎样,谢谢你的建议。
标签: java swing layout layout-manager flowlayout