我有一个包含许多对象的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. 不能将事件侦听器添加到对象。 fabricjs
- 4. 将事件侦听器添加到iframe
- 5. 将“this”添加到事件侦听器?
- 6. 将文档侦听器添加到JCombobox
- 7. 将事件侦听器添加到JFrame
- 8. 将点击侦听器添加到Javascript对象中生成的代码中
- 9. 向对象添加事件侦听器也会将其全部添加到对象中
- 10. 将事件侦听器附加到所有URLRequest的
- 11. 将JPanel对象添加到单独的JPanel中
- 12. 如何将侦听器添加到react-native中的传感器?
- 13. Firebase将侦听器附加到查询对象
- 14. 如何将带有组件的JPanel对象添加到JFrame中
- 15. 事件侦听器添加到文档中对元素存在检查,然后添加事件侦听器
- 16. 如何将侦听器事件添加到Java中的JComboBox中
- 17. 将事件侦听器添加到动态容器中
- 18. 在actionperformed侦听器中创建jpanel?
- 19. 向GL空间内的对象添加鼠标侦听器
- 20. JMS序列化侦听器:添加的对象为空
- 21. 添加AWT侦听器到SWT组件
- 22. 如何将侦听器添加到画布中的位图? (Android)
- 23. 查找给定对象的所有侦听器
- 24. android-无法将侦听器添加到虚拟表格中 -
- 25. 将侦听器附加到`MIDIGetNumberOfSources`
- 26. 将事件侦听器添加到Symfony3中的动态添加字段
- 27. 将侦听器添加到的GridPanel,它的已经创建
- 28. 如何将关键字侦听器添加到LWJGL显示器?
- 29. 将滚动侦听器添加到RecyclerView适配器
- 30. 在ArrayList中添加按钮侦听器
http://stackoverflow.com/questions/5344823/how-can-i-listen-for-key-presses-within- java-swing-accross-all-components? – 2013-05-03 20:53:40