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引发异常。此外,如果您想要按钮的动态命名,您可以始终使用文本字段并将其添加到框架中,从文本字段获取新名称并将其设置为按钮,请参阅我的编辑。所有这些动态创建的按钮的最终用途是什么?如果用户激活第三个,会发生什么?七号?另见