我有一個包含許多對象的JPanel,並且可以執行一個主要操作:計算。有一個按鈕可以做到這一點,而且還有一個JTextField和其他用戶可能想要按下輸入的組件。例如,如果您從JComboBox中選擇了一些內容並按下回車鍵,計算就會發生。是否有一種簡單的方法將一個監聽器添加到JPanel的所有內容中,而不是將ActionListeners添加到每個組件中?將偵聽器添加到JPanel中的所有對象
回答
JPanel
延伸JComponent
,繼承Container
。您可以使用getComponents()
。您會得到一個Component[]
數組,您可以循環訪問併爲每個組件添加一個Component
的子類,如Button
,併爲每個組件添加相同的ActionListener
。請參閱http://docs.oracle.com/javase/6/docs/api/java/awt/Component.html
您可能需要使用遞歸來做到這一點,因爲組件可能嵌套在容器中。 – 2013-05-03 21:11:17
@Hovercraft Full Of Eels [我知道(如果使用不正確,非常脆弱)非常簡單,可設置,基於字符串值,可以在飛行時生成參數](http://stackoverflow.com/questions/9007259/giving- jmenuitems名到其通的ActionListener/9007348#9007348) – mKorbel 2013-05-03 22:17:42
@cinhtau擁有正確的方法。由於沒有一個具有'addActionListener'方法的公共類型,這使得它變得更加困難。你必須檢查你想添加動作偵聽器的每個案例。
public static void addActionListenerToAll(Component parent, ActionListener listener) {
// add this component
if(parent instanceof AbstractButton) {
((AbstractButton)parent).addActionListener(listener);
}
else if(parent instanceof JComboBox) {
((JComboBox<?>)parent).addActionListener(listener);
}
// TODO, other components as needed
if(parent instanceof Container) {
// recursively map child components
Component[] comps = ((Container) parent).getComponents();
for(Component c : comps) {
addActionListenerToAll(c, listener);
}
}
}
這就是我現在做的權利,它的工作
private void setActionListeners() {
for (Component c : this.getComponents()){
if (c.getClass() == JMenuItem.class){
JMenuItem mi = (JMenuItem) c;
mi.addActionListener(this);
}
if (c.getClass() == JCheckBoxMenuItem.class){
JCheckBoxMenuItem cmi = (JCheckBoxMenuItem) c;
cmi.addActionListener(this);
}
}
}
- 1. 如何將偵聽器添加到現有的偵聽器對象?
- 2. 將事件偵聽器添加到窗口的子對象中
- 3. 如何將事件偵聽器添加到svg中的對象?
- 4. 如何將鼠標偵聽器添加到JPanel圖像?
- 5. 添加範圍對象偵聽器
- 6. 將偵聽器添加到給定類的所有元素
- 7. 將對象添加到Jpanel
- 8. 不能將事件偵聽器添加到對象。 fabricjs
- 9. 將偵聽器添加到對象原型
- 10. 添加偵聽器到Ext.grid.ColumnModel
- 11. 將SSL偵聽器添加到UnboundID
- 12. 將事件偵聽器添加到iframe
- 13. 將事件偵聽器添加到JFrame
- 14. 將「this」添加到事件偵聽器?
- 15. 將文檔偵聽器添加到JCombobox
- 16. 將點擊偵聽器添加到Javascript對象中生成的代碼中
- 17. 無法在JPanel中添加動作偵聽器
- 18. 向對象添加事件偵聽器也會將其全部添加到對象中
- 19. 將事件偵聽器附加到所有URLRequest的
- 20. 需要知道NSNotification對象中的所有偵聽器
- 21. 將JPanel對象添加到單獨的JPanel中
- 22. 如何將偵聽器添加到react-native中的傳感器?
- 23. Firebase將偵聽器附加到查詢對象
- 24. Actionscript 3 - 在鼠標偵聽器中添加鼠標偵聽器?
- 25. 將偵聽器添加到Outlook中的不同文件夾中
- 26. 如何將偵聽器事件添加到Java中的JComboBox中
- 27. 事件偵聽器添加到文檔中對元素存在檢查,然後添加事件偵聽器
- 28. 如何將帶有組件的JPanel對象添加到JFrame中
- 29. 添加偵聽
- 30. 將事件偵聽器添加到動態容器中
http://stackoverflow.com/questions/5344823/how-can-i-listen-for-key-presses-within- java-swing-accross-all-components? – 2013-05-03 20:53:40