【问题标题】:Java-Swing: Change getSource() in ActionListenerJava-Swing:更改 ActionListener 中的 getSource()
【发布时间】:2010-04-20 03:19:59
【问题描述】:

我有一个包含 JButton 的类。这是无法更改的。

问题是这样的:actionListener 调用 getSource() 并获取 JButton,而不是容器类。

我可以在添加 actionListener 之前更改 getSource 检索的内容吗? 或者 JButtons 可以对其容器进行变量引用吗?

我不能让一个类扩展一个 JButton。它导致了用于绘图目的的错误......我一周的故事。

【问题讨论】:

  • 我不明白这个问题。如果尚未将其添加到 GUI,您如何单击按钮并因此生成 ActionEvent?对我来说听起来像是一个奇怪的设计。我也看不出为什么扩展 JButton 会导致绘画问题。再次,您在代码中做了一些奇怪的事情。您需要首先解决这些问题。发布您的 SSCCE:sscce.org

标签: java swing user-interface actionlistener


【解决方案1】:

JButton.getParent()

【讨论】:

  • 它包含的对象不是组件,它只是存储了一个 JButton 对象以及其他数据。因此,getParent 不会返回包含 JButton 的对象。您知道让按钮引用某些东西或覆盖 JButton 的 ActionListener 函数的任何其他方式,以提供“源”吗?
  • 如何设置名称(setName)或actionCommand(setActionCommand)。然后使用它从全局可访问的地图中检索容器?
【解决方案2】:

向侦听器添加上下文比使用getSource 好得多。

【讨论】:

    【解决方案3】:

    要将任意数据附加到任何 JComponent,请使用 [putClientProperty(Object key, Object value)][1],然后在您的侦听器中调用 getClientProperty(Object key) 以检索值。

    [1]:http://java.sun.com/javase/6/docs/api/javax/swing/JComponent.html#putClientProperty(java.lang.Object,java.lang.Object)

    【讨论】:

      猜你喜欢
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 2012-12-20
      • 1970-01-01
      相关资源
      最近更新 更多