点击动态添加摇摆组件到gui?

时间:2016-02-06 19:33:41

标签: java swing user-interface

纯粹在理论上添加像

这样的新组件
JButton buttonAdd= new JButton("Add More");
        buttonAdd.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                  panel.add(new JComboBox<String>(data);
                  panel.add(new JTextField();
                }
        });

当你没有以正常方式声明它时,有没有办法 getSelectedIndex() getText()

2 个答案:

答案 0 :(得分:0)

是的,您可以通过这种方式将Swing组件添加到容器中。但是,您需要在面板上调用revalidate,否则它们可能不会立即显示。

如果需要在创建这些组件后访问它们,请将构造函数返回的值分配给在类中声明的对象字段。您无法在调用方法中分配变量,因为从内部类调用构造函数。

答案 1 :(得分:0)

有几种方法可以实现动态添加的组件来摆动树:

第一种方法:

panel.getComponent(n);

返回面板中的第n个组件(Container)。 (n是顺序,该组件添加到其父级(父级是panel))(您需要知道组件的索引)这样您可以使用((JComboBox)panel.getComponent(3)).getSelectedIndex()

第二种方法

在动态添加组件时直接添加一些侦听器;

JButton b1 = new JButton("add");
b1.addActionListener(e -> {  

    JComboBox<String> color = new JComboBox<String>();
    color.addActionListener(x -> { myFormBean.setColor(color.getSelectedItem();) });
    panel.add(color);

    JTextField name = new JTextField();
    name.getDocument().addDocumentListener(new DocumentListener() {
        @Override
        public void removeUpdate(DocumentEvent e) {
            myFormBean.setName(name.getText());
        }

        @Override
        public void insertUpdate(DocumentEvent e) {
            myFormBean.setName(name.getText());
        }

        @Override
        public void changedUpdate(DocumentEvent e) {
            myFormBean.setName(name.getText());
        }
    });
    panel.add(name);

    panel.revalidate();
    panel.repaint();

});

这样您就不需要访问动态添加的组件了。

第3种方法可能正在使用数据绑定框架,

第4种方法 ......