【问题标题】:JSpinner Source?JSpinner 来源?
【发布时间】:2026-01-24 04:30:02
【问题描述】:

我有一个类,其中包含两个 JSpinner 对象,x 和 y。 我有一个添加到两者的更改侦听器。 有人可以告诉我如何实现我的更改侦听器,以便侦听器可以分辨出两个对象之间的区别。 例如伪代码:

if(source equals x)
    do this
else if(source equals y)
    do that

谢谢大家,

【问题讨论】:

  • 更好的方法是使用匿名类

标签: java swing jspinner


【解决方案1】:

您可以简单地使用匿名类来实现每个微调器的侦听器

例如,如果你想实现对 x 的更改监听器,你可以这样做:

x.addChangeListener(new ChangeListener()
{
   public void stateChanged(ChangeEvent e)
   {
   }
});

和你一样

【讨论】:

    【解决方案2】:

    在可能的情况下,为每个控件使用单个侦听器更为谨慎(正如 Ali 指出的那样,+1)。它隔离了事件/动作,使其通常更易于阅读和理解......

    如果您看不到自己在使用它,那么每个EventObject 都有一个getSource 方法,它是对引发事件的控件的引用...

    public void stateChanged(ChangeEvent e)
    {
        if (e.getSource() == xControl) {
            // xControl updated
        } else if (e.getSource() == yControl) {
            // yControl updated
        }
    }
    

    【讨论】:

    • 我确实尝试过实施您的解决方案,但是当我想获得 JSpinner 的值时遇到了问题。
    • 想必你需要将源转换回JSpinner