扩展java swing按钮?
我希望每个JButton也有一个与之关联的数字或id。这就是为什么我决定扩展JButton类来创建SuperJButton类扩展java swing按钮?,java,swing,jbutton,Java,Swing,Jbutton,我希望每个JButton也有一个与之关联的数字或id。这就是为什么我决定扩展JButton类来创建SuperJButton类 如何在单击此按钮时生成的操作事件中包含id/编号的值,以便响应此操作的类可以访问id?您不必更改操作事件。您可以这样做 SuperJButton jButton = (SuperJButton) actionEvent.getSource(); jButton.getId() jButton.getNumber() 您不必更改动作事件。您可以这样做 SuperJBut
如何在单击此按钮时生成的操作事件中包含id/编号的值,以便响应此操作的类可以访问id?您不必更改操作事件。您可以这样做
SuperJButton jButton = (SuperJButton) actionEvent.getSource();
jButton.getId()
jButton.getNumber()
您不必更改动作事件。您可以这样做
SuperJButton jButton = (SuperJButton) actionEvent.getSource();
jButton.getId()
jButton.getNumber()
另一种不需要子分类的方法是使用
JComponent.putClientProperty(对象键,对象值)
存储与按钮关联的ID
可以使用getClientProperty(对象键)
检索它
这可能更灵活一些,因为您可以将此ID附加到每个按钮,而无需使用特定于应用程序的代码,例如,当使用GUI生成器时,更改按钮的创建代码有点复杂,或者当您需要使用现有组件时。另一种不需要子分类的替代方法,可以使用
JComponent.putClientProperty(对象键,对象值)
存储与按钮关联的ID
可以使用getClientProperty(对象键)
检索它
这可能更灵活一些,因为您可以将此ID附加到每个按钮,而无需使用特定于应用程序的代码,例如,在使用GUI生成器时,更改按钮的创建代码有点复杂,或者当您需要使用已有的组件时。从
MVC
的角度来看:JButton
是一个视图
,而JButton
类不是像id
这样的更好的地方。id的更好位置是在您自己的按钮模型
实现中。从MVC
的角度来看:JButton
是一个视图
,而JButton
类并不是类似id
的更好位置。id的更好位置是在您自己的ButtonModel
实现中。您可以通过使用ae.getSource()
获得生成操作的源表单,在您的例子中是super按钮,其中ae
是ActionEvent
的参考。通过这种方式,您可以访问生成操作的按钮,然后可以获取与其关联的id。为什么要将id字段包含在其中。?它只是用来调查点击了哪个按钮吗?@VallabhPatade-没错。为什么要处理与该按钮关联的文本字符串?这就是网络上所有的示例代码响应一个动作所做的。不要扩展,JSomething就是要按原样使用的。不管怎样,你为什么要识别按钮?它已经有了各种各样的选项(f.i.它的name属性、actionCommand/name/Action上的任意值、clientProperty)——为什么这些选项都不能满足您的需要?哦,刚刚注意到为什么已经被问到了——虽然没有令人信服的答案,但是:字符串没有什么问题…@kleopatra:那不是真的。子类JComponent(或任何其他JXxxx类)完全可以。这就是拥有面向对象GUI框架的优势。任何构建在Swing之上的库/框架都将子类Swing组件(想想NetBeans平台或SwingX库),您可以通过使用ae.getSource()
来获取生成操作的源代码表单,在您的例子中,超级按钮是通过ae.getSource()
来实现的,其中ae
是ActionEvent
的引用。通过这种方式,您可以访问生成操作的按钮,然后可以获取与其关联的id。为什么要将id字段包含在其中。?它只是用来调查点击了哪个按钮吗?@VallabhPatade-没错。为什么要处理与该按钮关联的文本字符串?这就是网络上所有的示例代码响应一个动作所做的。不要扩展,JSomething就是要按原样使用的。不管怎样,你为什么要识别按钮?它已经有了各种各样的选项(f.i.它的name属性、actionCommand/name/Action上的任意值、clientProperty)——为什么这些选项都不能满足您的需要?哦,刚刚注意到为什么已经被问到了——虽然没有令人信服的答案,但是:字符串没有什么问题…@kleopatra:那不是真的。子类JComponent(或任何其他JXxxx类)完全可以。这就是拥有面向对象GUI框架的优势。任何构建在Swing之上的库/框架都将子类Swing组件(想想NetBeans平台或SwingX库),但如果我们想这样做只是为了找到事件的来源,我们可以使用setActionCommand()和getActionCommand()。要获取事件的源,必须使用getSource()
,而不是getActionCommand().@VallabhPatade-我认为没有二传手。只有getter@davidblaine:在构造函数中提供action命令。如果我回忆正确,当按钮创建ActionEvent
时,它将从与JButton
@davidblaine关联的action
传递操作命令:调用actionPerformed()
方法的源将创建ActionEvent
事件,并将自身作为源传递。你为什么不试试呢?或者阅读JavaDocs,或者检查源代码?但是如果我们只是想找到事件的源代码,我们可以使用setActionCommand()和getActionCommand()。要获取事件的源代码,必须使用getSource()
,而不是getActionCommand()。@VallabhPatade-我认为没有setter。只有getter@davidblaine:在构造函数中提供action命令。如果我回忆正确,当按钮创建ActionEvent
时,它将从与JButton
@davidblaine关联的action
传递操作命令:调用actionPerformed()
方法的源将创建