我正在为我的第一个自定义Swing程序窗口创建自定义装饰,我刚开始使用布局管理器,看起来我做错了,首先我使用BorderLayout和BorderLayout.EAST或WEST来显示在角落里,但它只允许一个面板显示在一个角落,就像它不会连续显示一样。
看起来像这样:
img http://gyazo.com/448ffc85c1568fd281ee6b2a4079a482.png
使用该代码:
this.panel.setLayout(new BorderLayout());
this.panel.add(this.createToolButton("X"), BorderLayout.EAST);
但如果我添加另一个面板,最新的面板将 上一个面板(注意我使用了面板,因为JButton讨厌我,因为它的默认样式不是&#39 ;让我让它平坦)
现在我使用了GridBagLayout
this.panel.setLayout(new GridBagLayout());
Box panels = new Box(BoxLayout.X_AXIS);
panels.add(this.createToolButton("X"));
this.panel.add(panels, BorderLayout.EAST);
但是在跑步中我得到了
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: cannot add to layout: constraints must be a GridBagConstraint
at java.awt.GridBagLayout.addLayoutComponent(Unknown Source)
我做错了什么?如何将面板逐个向右浮动?
编辑:
this.panel.setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.fill = GridBagConstraints.WEST;
this.panel.add(this.createToolButton("X"), gc);
答案 0 :(得分:4)
线程中的异常" AWT-EventQueue-0" java.lang.IllegalArgumentException :无法添加到布局:约束必须是GridBagConstraint at java.awt.GridBagLayout.addLayoutComponent(Unknown Source)
将GridBagConstraint
与GridBagLayout
一起使用。
this.panel.setLayout(new GridBagLayout());
GridBagConstraint gc = new GridBagConstraint();
// set different properties of GridBagConstraint as per your need
this.panel.add(panels, gc);
了解更多How to Use GridBagLayout了解有关GridBagConstraint的属性的更多信息。
以下是The Example了解详情。
您可以尝试使用正确对齐的FlowLayout
:
JPanel titlePanel=new JPanel(new GridLayout(1,2));
titlePanel.setBorder(new LineBorder(Color.BLACK));
titlePanel.setBackground(Color.LIGHT_GRAY);
JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 0, 0));
panel.setBackground(Color.LIGHT_GRAY);
titlePanel.add(new JLabel("Title",JLabel.LEFT));
panel.add(new JButton("X"));
titlePanel.add(panel);
frame.add(titlePanel, BorderLayout.NORTH);
// add panel in the north section of the undecorated JFrame
// that by default uses BorderLayout
快照:
答案 1 :(得分:2)
如果您正在使用
this.panel.add(panels, BorderLayout.EAST);
然后你应该使用BorderLayout
而不是GridBagLayout
。
this.panel.setLayout(new BorderLayout());
您可以在文档How to Use BorderLayout中阅读更多内容。