是否可以在一个语句中向JPanel添加多个组件?

时间:2016-05-01 15:46:03

标签: java swing

问题很简单。我意识到如果我允许将组件添加到JPanel中,我的代码可以稍微清理一下:

//north panel
JPanel northPanel = new JPanel(new GridLayout(0,3));
btnAdd = new JButton("Add");
btnEdit = new JButton("Edit");
btnDelete = new JButton("Delete");
northPanel.add(btnAdd, btnEdit, btnDelete);

而不是像这样:

//north panel
JPanel northPanel = new JPanel(new GridLayout(0,3));
btnAdd = new JButton("Add");
btnEdit = new JButton("Edit");
btnDelete = new JButton("Delete");
northPanel.add(btnAdd);
northPanel.add(btnEdit);
northPanel.add(btnDelete);

有办法吗?我已经浏览了SO和互联网,包括Oracle的文档,我知道这不是为这种特定语法构建的.add()方法,但我想知道是否还有其他具有此功能的方法。

良好的解决方案:

谢谢大家的反馈。如果以我描述的方式完成,单个语句实际上会更复杂,这是有道理的。 L. Mehmeti建议将组件存储在一个数组中并创建一个方法,该方法可以添加数组中的所有组件,完全符合这个问题。通过这种方式,当有很多组件时, order 很容易跟踪,而不必搜索一堆独立的构造函数并添加语句。

2 个答案:

答案 0 :(得分:0)

您可以创建一个方法并在init方法中调用它。

public void addComponentsJ()
{
     northPanel.add(btnAdd);
     northPanel.add(btnEdit);
     northPanel.add(btnDelete);
}

这将允许您使用

addComponentsJ()// to add all the components..

但是,这与您正在做的事情相同...只是将add方法调用重定位到另一个方法。 从而允许你“将它们全部添加到一个声明中” Swing不支持在一个语句中添加组件...唯一的方法是将调用重定位到另一个方法。

答案 1 :(得分:0)

我很抱歉,但我想没有办法做到这一点。我认为唯一的方法是编写自己的方法。例如:

public static void main(String[] args) {

    Example main = new Example("Example");

}

public Example(String title) {

    super(title);

    JPanel panel = new JPanel();

    panel.setLayout(new FlowLayout());

    JComponent[] components = new JComponent[3];

    components[0] = new JLabel("Hello!");
    components[1] = new JLabel("How are you?");
    components[2] = new JLabel("I am fine. Thanks");

    addComponents(panel, components);

    add(panel);

    setVisible(true);

}

public void addComponents(JComponent target, JComponent[] components) {

    for(JComponent component : components) {

        target.add(component);

    }

}

希望我能提供帮助。