我在製作一個App。在java中,其中有一個Button,我添加了一個actionlistener。它(按鈕)產生的ActionEvent執行一些代碼。現在,我希望這段代碼在應用程序運行時運行。開始並且不按下按鈕。我的意思是,我想生成Actionevent(無需按下按鈕),以便ActionPerformed包含的代碼作爲應用程序執行。開始。之後,只要按下按鈕,它就可以運行。以編程方式生成Java中的Actionevent
3
A
回答
2
是的,它可以完成,但它沒有任何意義,因爲您的目標不是按下按鈕或調用ActionListener的代碼,而是在按鈕按下時和程序啓動時具有共同行爲向上。對我來說,實現這一點的最好方法是創建一個方法,該方法由ActionListener的actionPerformed方法和類啓動。
下面是一個簡單的例子。在下面的代碼中,方法禁用按鈕,將JPanel變爲綠色,並啓動一個定時器,在2秒內啓用該按鈕並將JPanel的背景顏色重置爲默認值。導致出現此問題的方法是在主類的構造函數,並在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();
}
});
}
}
3
您可以創建這樣只要使用構造任何其他Java對象是ActionEvent。然後你就可以直接發送到組件與Component.processEvent(..)
然而,在這種情況下,我認爲你是更好地使你的代碼放到一個單獨的函數被調用這兩個:
- 通過當按鈕被按下
- 直接通過您的應用程序的啓動代碼(使用SwingUtilities.invokeLater()或SwingUtilities.invokeAndWait()可能性,如果你需要它的事件處理線程上發生)的ActionListener的
這樣喲你不要將表示邏輯與任何代碼的業務邏輯混合在一起......
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();
}
而且,如果你的代碼需要執行需要一段時間才能完成,您可能會wa。 nt在您的actionPerformed
按鈕事件中使用單獨的線程,以便您的應用程序UI不會凍結。
1
Just Call JButton.doClick()它應該觸發與JButton關聯的ActionEvent。
相關問題
- 1. 用Java以編程方式生成XSD
- 2. 以編程方式生成的視圖
- 3. 在java中以編程方式生成XSD
- 4. 如何在Java中以編程方式生成serialVersionUID?
- 5. SSRS:以編程方式生成報告
- 6. Yii2以編程方式生成模型
- 7. 以編程方式生成pom.xml
- 8. 以編程方式生成頂點
- 9. 以編程方式生成佈局(XAML)
- 10. 以編程方式生成JavaDoc文件
- 11. 以編程方式生成.mht文件
- 12. 以編程方式生成Eclipse項目
- 13. 以編程方式生成Django sqlsequencereset
- 14. 以編程方式生成Excel文檔
- 15. 以編程方式生成HTML
- 16. Spring MVC:以編程方式生成ModelAndView
- 17. 以編程方式生成BPEL文件?
- 18. 以編程方式生成QR代碼
- 19. 以編程方式生成聲音
- 20. 以編程方式生成Class.vb文件
- 21. 以編程方式生成視頻
- 22. 以編程方式生成html標記
- 23. 以編程方式在android中生成編輯文本
- 24. Java中的ActionEvent
- 25. 以編程方式從ASP.NET生成可編輯的Word文檔?
- 26. 以編程方式爲JavaScript中的WebGL生成紋理
- 27. 以編程方式從iOS中的UIWebView生成多頁PDF
- 28. python:以編程方式爲方便類生成方法
- 29. R:以編程方式生成帶上標的圖軸中斷標籤(以編程方式強調)
- 30. 如何以編程方式在Java中生成並存儲HMacSHA256密鑰?
不,如果代碼需要一段時間才能完成(這將暗示需要'SwingWorker'),而不是使用SwingUtilities,而是使用SwingUtilities.invokeLater()將事件線程上的代碼排隊。 )'如果你在程序啓動時調用它並*關閉事件線程*。 –
你是對的,在重讀他的答案後,我編輯了那段 –