如何与动态添加的swing组件进行交互?

时间:2016-10-25 13:59:18

标签: java swing jbutton

以下代码段会在按下“按钮”时创建一个新按钮。我想知道是否有任何方法可以为此新按钮分配名称,动作侦听器或任何其他属性以便使用它。

    button.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            panel.add(new JButton("Hello"));
            frame.revalidate();
            frame.repaint();
        }
    });

我正在寻找的示例:按下按钮,创建一个具有名称并在单击时执行操作的新按钮。 (最好是多次点击时我可以动态制作多个按钮)

4 个答案:

答案 0 :(得分:0)

调用test();进入你的第一个按钮的actionPerformed()。

每次单击第一个按钮都会动态创建另一个按钮并单独命名。每个按钮也可以动态创建单独命名的按钮。

//The counter is used to name the buttons individually
//It doesn´t matter wich of the created buttons will call test()
//any new button will have a different name than the other buttons
public int counter;    

public void test() {    
        JButton btn = new JButton();
        //Now you can edit the properties
        //btn.setLocation
        //btn.setSize
        //btn.setVisible
        //btn...
        btn.setText("Hello");
        btn.setName("Button" + counter);
        panel.add(btn);   

        //Add of listener is untested, but it should work like this
        btn.addActionListener(new ActionListener() {  
            @Override  
            public void actionPerformed(ActionEvent e) {
                test();
            }
        });

        counter ++;
    }

答案 1 :(得分:0)

您必须先创建JButton

JButton but = new JButton();
but.setText("Button");

然后添加监听器。在覆盖actionPerformed()内部实现单击按钮时要执行的操作:

but.addActionListener(new ActionListener() { 
    @Override
    public void actionPerformed(ActionEvent e) {
        // Actions
    }
});

最后添加到面板:

panel.add(but);

答案 2 :(得分:0)

这是怎么做的:

  JTextField textfield= new JTextField();

  button.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {   
                JButton btn=new JButton();
                btn.setText(textfield.getText().toString());
                textfield.setText("");
                btn.addActionListener(new ActionListener(){
                             @Override
                             public void actionPerformed(ActionEvent e){
                                    //the action on the button

                                    }
                             });   
                panel.add(btn);
                frame.revalidate();
                frame.repaint();
            }
        });

答案 3 :(得分:0)

简单,使用 AbstractAction

Icon myIcon = null;
JButton btn = new JButton(new AbstractAction("ClickMe", myIcon) {
   @Override
   public void actionPerformed(ActionEvent e) {
      JOptionPane.showInputDialog("hello");
   }
});
panel.add(btn);

干杯!