我希望添加3个JPanel,它们间隔不同的距离,填充内容窗格/ JFrame。 目前,add(new JPanel())将覆盖当前内容窗格或根本不显示。
理想情况下,我希望代码类似(例如):
JPanel panel1 = new JPanel();
panel1.add(new jbutton())
panel1.setBounds(0,0,100,100);
JPanel panel2 = new JPanel();
panel2.add(new jbutton());
panel2.setBounds(100,0,100,100);
getContentPane().add(panel1);
getContentPane().add(panel2);
等等...
我知道可以将面板添加到面板中,因为我已经使用borderlayout完成了它。 请不要告诉我使用布局管理器,我一直在使用gridbag,它没有产生我想要的结果。
我希望完全控制对象的大小和位置。另外,请不要告诉我,“你是愚蠢的;这是愚蠢的;你为什么要这么做?”
只有有用的回复!我不是一个菜鸟程序员,只是一个对GUI感到沮丧的人,所以请随意深入了解你想要的深度。
答案 0 :(得分:2)
默认情况下,JFrame的内容窗格使用BorderLayout,因此每次向其添加新面板时,如果不在布局中指定其位置,则会将其添加到中心,从而替换前一个。
只需将内容窗格的布局设置为您想要的内容即可。您当然可以使用null布局(即将布局设置为null
),但有时您会被这个设计错误所困扰。仅仅因为你无法使用布局管理器并不意味着你不应该这样做。继续学习。 GridBagLayout是最复杂的一个。你可以先使用其他的。
答案 1 :(得分:1)
Doing Without a Layout Manager有一个很好的教程可以帮到你。它最重要的建议是使用诸如NetBeans之类的IDE,但它也包括手工操作。
请注意,如果您找不到适合您的默认LayoutManager,您可以随时编写自己的版本 - 虽然在这种情况下听起来像JSplitPane就是您所需要的 - 请参阅How to Use Split Panes
答案 2 :(得分:1)
我希望添加3个JPanel,它们间隔不同的距离,填充内容窗格/ JFrame。
在您的示例中,面板间隔的距离不同。面板彼此连接。所以你需要做的就是使用一个FlowLayout面板,它使用水平间隙为0。
您的主要代码可能是:
JPanel main = new JPanel( new FlowLayout(FlowLayout.CENTER, 0, 0) );
JPanel panel1 = new JPanel();
panel1.setPreferredSize( new Dimension(100, 100) );
panel1.add( new JButton() );
main.add( panel1 );
JPanel panel2 = new JPanel();
panel2.setPreferredSize( new Dimension(100, 100) );
panel2.add( new JButton() );
main.add( panel2 );
frame.add( main );
鉴于你发现这样的布局代码令人困惑,我建议你真的不明白如何使用布局管理器。和其他人一样,我建议您花点时间了解如何使用布局管理器。
顺便使用null布局并不会让你的生活更轻松。当然,您可以将组件准确放置在您想要的位置,但是您是否满足了面板占据内容窗格的整个空间的要求?您将无法使用框架的pack()方法,因为当您使用空布局时,“主”面板将没有首选大小,因此当您使框架可见时,您将看到的所有内容都是标题酒吧和边界。如果您手动尝试设置框架的大小然后是,您知道3个面板(300,x 100)的大小,但您不知道标题栏和边框的大小。所以你将无法正确计算尺寸。
可能需要几分钟才能理解布局管理器,但这非常值得。
答案 3 :(得分:0)
布局管理器将允许您完全控制组件的位置和大小,您只需找到一个足够简单的应用程序,同时为您提供所需的控制量。没有布局管理器是可能的,但是我绝不会建议这样编写GUI代码的方法,你最终会管理太多的GUI内容,这些内容通常由LayoutManager
正确管理(例如可用空间管理,父窗口调整大小..)。
大多数LayoutManager
类的工作方式相同;将组件添加到Container
时,还要指定一个约束,该约束将告诉LayoutManager
放置组件的位置,以及如何处理对组件放置有影响的所有类型的事件(例如调整容器大小)。一些布局管理器具有非常简单的约束(BorderLayout
仅询问组件位置),而其他布局管理器具有非常完整的约束集(GridBagLayout
,通过GridBagConstraints
类)
我更喜欢的LayoutManager
是GridBagLayout
(JavaDoc)。正确使用GridBagContraints
类时,您可以指定窗口小部件的显示位置,每个组件之间的间距,可用空间的分布情况等等。此tutorial应该可以帮助您入门使用此布局管理器。
如果这个不适合您的需求,或者您觉得它太复杂,您应该在网上搜索其他LayoutManager
的教程。