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

Java 如何与动态添加的swing组件交互?,java,swing,jbutton,Java,Swing,Jbutton,按下“按钮”时,下面的代码片段将创建一个新按钮。我想知道是否有任何方法可以为这个新按钮指定名称、动作侦听器或任何其他属性以使用它 button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { panel.add(new JButton("Hello"));

按下“按钮”时,下面的代码片段将创建一个新按钮。我想知道是否有任何方法可以为这个新按钮指定名称、动作侦听器或任何其他属性以使用它

    button.addActionListener(new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            panel.add(new JButton("Hello"));
            frame.revalidate();
            frame.repaint();
        }
    });
我正在寻找的示例:在按钮按下时,创建一个新按钮,该按钮有一个名称,并在单击时执行一个操作。(最好我可以在多次单击时动态创建多个按钮)

调用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 ++;
    }

您必须首先创建
JButton

JButton but = new JButton();
but.setText("Button");
然后添加侦听器。在被覆盖的
actionPerformed()
中,执行单击按钮时要执行的操作:

but.addActionListener(new ActionListener() { 
    @Override
    public void actionPerformed(ActionEvent e) {
        // Actions
    }
});
最后添加到面板:

panel.add(but);

这就是如何做到这一点:

  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();
            }
        });

简单,使用AbstractAction

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

干杯

虽然这是一个很好的按钮示例,但我想问的是,是否有可能在btn的actionPerformed函数中创建一个新按钮(动态命名)。只需在第一个按钮的actionPerformed中调用test(),以便动态命名,您应该像使用全局计数器一样使用,否则将运行另一个方法yes,但是作为编码员,我不确定这个按钮是否会被按下,或者会被按下多少次。如有必要,我需要一种方法来动态创建多个具有不同名称的按钮。单击任何按钮(第一个或动态创建的按钮之一)将创建另一个具有单个名称的按钮(按钮[按钮数])如果您想让代码做其他事情,恐怕我不明白您是否会在使用嵌套动作侦听器时引发某种错误?此外,如果按钮被按下不止一次,它会尝试创建多个名称相同的按钮吗?是否可以使用与此类似的格式动态命名和创建按钮?@a.Johnson Not它不会为任何类型的嵌套Listners引发异常。此外,如果您想要按钮的动态命名,您可以始终使用文本字段并将其添加到框架中,从文本字段获取新名称并将其设置为按钮,请参阅我的编辑。所有这些动态创建的按钮的最终用途是什么?如果用户激活第三个,会发生什么?七号?另见