我正在制作一款应用。在java中,我有一个Button,我已经添加了一个actionlistener。它生成的ActionEvent(按钮)执行一些代码。现在我希望这段代码能够在应用程序运行时运行。开始而不按下按钮。我的意思是,我想生成Actionevent(不按下按钮),以便ActionPerformed包含的代码段作为app执行。开始。之后,只要按下按钮,它就可以运行。
答案 0 :(得分:3)
只需使用构造函数,就可以像创建任何其他Java Object一样创建ActionEvent。然后,您可以使用Component.processEvent(..)
将它们直接发送到组件然而,在这种情况下,我认为你最好将你的代码变成一个单独的函数,它被称为:
通过这种方式,您不会将表示逻辑与代码所做的业务逻辑混淆....
答案 1 :(得分:2)
是的,它可以完成,但它确实没有意义,因为你的目标不是按下按钮或调用ActionListener的代码,而是按下按钮和程序启动时有一个共同的行为。对我来说,实现这一目标的最佳方法是让一个方法由ActionListener的actionPerformed方法和启动时的类调用。
这是一个简单的例子。在下面的代码中,一个方法禁用一个按钮,将JPanel变为绿色,并启动一个Timer,在2秒内启用该按钮并将JPanel的背景颜色重置为其默认值。导致此行为的方法在main类的构造函数和JButton的ActionListener的actionPerformed方法中调用:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ActionOnStartUp extends JPanel {
private static final int PANEL_W = 400;
private static final int PANEL_H = 300;
private static final int TIMER_DELAY = 2000;
private JButton turnGreenBtn = new JButton("Turn Panel Green for 2 seconds");;
public ActionOnStartUp() {
turnPanelGreen();
turnGreenBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
turnPanelGreen();
}
});
add(turnGreenBtn);
}
public void turnPanelGreen() {
setBackground(Color.green);
turnGreenBtn.setEnabled(false);
new Timer(TIMER_DELAY, new ActionListener() {
public void actionPerformed(ActionEvent ae) {
setBackground(null);
turnGreenBtn.setEnabled(true);
((Timer) ae.getSource()).stop(); // stop the Timer
}
}).start();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(PANEL_W, PANEL_H);
}
public static void createAndShowGui() {
JFrame frame = new JFrame("Foo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new ActionOnStartUp());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
答案 2 :(得分:1)
通常,按钮操作事件响应外部事件,以通知应用程序用户(或者更确切地说是某人或某人)与应用程序交互。如果你的按钮执行了一些你想在应用程序启动时执行的代码,为什么不把它放在适当的位置呢?
示例:的
public class SomeSharedObject {
public void executeSomeCode() { /*....*/ }
}
使用类似
的按钮设置按钮public void setButtonAction(final SOmeSharedObject obj) {
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj.executeSomeCode();
}
});
}
在应用程序启动时运行
public void initApplication(SomeSharedObject obj) {
obj.executeSomeCode();
}
而且,如果您需要执行的代码需要一段时间才能完成,您可能希望在actionPerformed
按钮事件中使用单独的线程,这样您的应用程序UI就不会冻结。
答案 3 :(得分:1)
只需调用 JButton.doClick(),它就会触发与JButton关联的ActionEvent。