Swing将JPanel连续显示在右下角

时间:2014-06-24 18:21:24

标签: java swing layout jpanel gridbaglayout

我正在为我的第一个自定义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);

2 个答案:

答案 0 :(得分:4)

  

线程中的异常" AWT-EventQueue-0" java.lang.IllegalArgumentException :无法添加到布局:约束必须是GridBagConstraint       at java.awt.GridBagLayout.addLayoutComponent(Unknown Source)

GridBagConstraintGridBagLayout一起使用。

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

快照:

enter image description here

答案 1 :(得分:2)

如果您正在使用

this.panel.add(panels, BorderLayout.EAST);

然后你应该使用BorderLayout而不是GridBagLayout

this.panel.setLayout(new BorderLayout());

您可以在文档How to Use BorderLayout中阅读更多内容。