【发布时间】:2012-03-22 14:29:29
【问题描述】:
我有一个 Jbutton,当按下它时会创建另一个按钮并将新按钮添加到面板中。如何将 actionListener 添加到新按钮?
例如:
JButton button = new JButton("lala");
button.addActionListener(this);
public void actionPerformed(ActionEvent event)
{
if (event.getSource() == button)
{
JButton newButton = new JButton("ahah");
newButton.addActionListener(this);
}
}
我想给 newButton 添加动作,我该怎么做?
编辑代码:
public void actionPerformed(ActionEvent event)
{
if (event.getSource() == button)
{
String name = tfOne.getText();
Icon flag = new ImageIcon("flag/"+name+".png");
JButton[] newButton = new JButton[click];
newButton[click-1] = new JButton(name, flag);
p2.add(newButton[click-1]);
newButton[click-1].addActionListener(new aListener());
p2.setLayout(new GridLayout(5+click,1)); //p2 is a panel that has been created
setSize(500,450+(click*20));
click++; //number of times the button is pressed
}
}
public class aListener extends MouseAdapter
{
public void mouseClicked(MouseEvent e)
{
tfOne.setText("lala");
}
}
代码组织得不好,但这或多或少是我想做的
【问题讨论】:
-
不,您的
aListener类必须实现ActionListnere,因为您正在执行addActionListener(...)或者您编写newButton[click - 1].addMouseListener(new aListener());以使其工作。 -
确实如此。您正在调用 addActionListener,但它应该是需要 aListener 类的按钮上的 addMouseListener,或者您可以让该类实现 ActionListener 而不是扩展 MouseAdapter,但是您需要将方法更改为 public void actionPerformed(ActionEvent e)鼠标点击次数
-
如需尽快获得更好的帮助,请发帖 SSCCE。但简而言之:1) 应用程序资源通常只能通过 URL 访问,而接受
String的ImageICon构造函数将其解释为File路径。 2) 看来这个 GUI 的整个逻辑是可疑的。它的目的是什么? 3) 布局更可能尊重组件的首选尺寸,而不是尺寸。但是设置首选尺寸时要格外小心,这不是轻而易举的事情。 4) 向按钮添加ActionListener而不是MouseListener。
标签: java swing jbutton actionlistener