java如何区分两个同名的JButton
我正在开发一个swing应用程序,其中需要有删除按钮。根据单击的按钮,每个单击的删除按钮最终将从不同的文件中删除一行。问题是我不能按名称区分这两个按钮,因为它们都与“删除”同名。我不想给它们起不同的名字,因为我可能有很多这样的删除按钮。是否有其他属性,如ID或我可以分配给他们的东西
你可以在下面搜索框中键入要查询的问题!
我正在开发一个swing应用程序,其中需要有删除按钮。根据单击的按钮,每个单击的删除按钮最终将从不同的文件中删除一行。问题是我不能按名称区分这两个按钮,因为它们都与“删除”同名。我不想给它们起不同的名字,因为我可能有很多这样的删除按钮。是否有其他属性,如ID或我可以分配给他们的东西
# 1 楼答案
如果坚持使用单个actionListener,则只需存储对按钮的引用,以便这些引用在action listener中可用:
然后在action listener中:
# 2 楼答案
避免使用“交换机”侦听器,而是为每个JButton提供自己的操作对象,该对象是通过重写AbstractAction创建的。AbstractAction甚至可以是同一个类的对象,但它也有一个对感兴趣的文件或字符串集合的引用,以便对正确的项执行删除操作
另一个选项是通过
HashMap<JButton, ActionableType>
将按钮与需要对其执行操作的对象相关联下面是两个合并到一个程序中的示例。右边的JPanel包含一行字对和一个delete JButton,JButton与包含字对的JLabel紧密相连,因为它们都保存在一个公共对象WordPairRow中。有一个ActionListener类被添加到每个delete JButton中,但它被传递唯一的WordPairRow和容器JPanel,容器JPanel包含所有组件:
如果按下任何删除按钮,则该行单词和按钮将从容器中移除
也许更好的解决方案是使用自定义表模型在JTable中显示单词对。在这个模型中,第三列布尔值显示为一个复选框。选中JTable下方的“删除选中行”按钮时,所有选中的行都将从JTable中删除。稍后,当您想要提取已更改的列表时,只需在表模型中迭代,提取剩余的单词
数据文件:
GUI外观:
# 3 楼答案
这个问题可以通过设置按钮的ActionCommand来解决。默认情况下,如果我们没有设置ActionCommand,那么按钮的名称将设置为action command。我做了以下几件事:
然后在ActionListener中,我可以检查