Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的基本侦听器行为问题_Java_Swing_Listener - Fatal编程技术网

Java中的基本侦听器行为问题

Java中的基本侦听器行为问题,java,swing,listener,Java,Swing,Listener,看到我对Java有一点经验,我不知道如何自己解决这个问题,这有点令人尴尬,但是直到现在,我除了用Java进行web编程外,从未真正做过任何事情 我正在尝试创建一个向导,并尝试概括窗口中显示的字段的创建。因此,我不能直接控制实际组件JTextField,而是一个处理更精细细节的包装器类。但是,我想知道值何时更改,因此我添加了一个“addVetoableChangeListener”方法,该方法允许我将VetoableChangeListener注册到JTextField本身 我已经验证了该方法是否

看到我对Java有一点经验,我不知道如何自己解决这个问题,这有点令人尴尬,但是直到现在,我除了用Java进行web编程外,从未真正做过任何事情

我正在尝试创建一个向导,并尝试概括窗口中显示的字段的创建。因此,我不能直接控制实际组件JTextField,而是一个处理更精细细节的包装器类。但是,我想知道值何时更改,因此我添加了一个“addVetoableChangeListener”方法,该方法允许我将VetoableChangeListener注册到JTextField本身

我已经验证了该方法是否被调用,以及它是否在调试中将侦听器传递到JTextField。但是,什么都不打。没有启动异常,并且从未调用实现接口VetoableChangeListener的方法中的我的断点

有什么我没有得到的吗?监听器必须是某种组件才能正常工作,还是只需实现接口?也许我忽略了一个明显的错误,因为我已经专注于它太长时间了,我希望你们中的一个会明白这一点。我尝试的一个简单版本是:

    public class TomcatConfigPanel extends WizardKeyValuePanel implements VetoableChangeListener {
       protected void initPanel(JPanel mainPanel) {
          addField("port", "8080");

          IWizardField portField = getField("port");
          portField.addVetoableChangeListener(this);
       }

       public void vetoableChange(PropertyChangeEvent evt)
             throws PropertyVetoException {
          // Stuff that would drive you Lovecraft insane if you saw what was written here
       }        
    }

   public class WizardTextField implements IWizardField {
      private JLabel label;
      private JTextField field;

      public WizardTextField() {
         // some initialization stuff ...
      }

      public void addVetoableChangeListener(VetoableChangeListener listener) {
         field.addVetoableChangeListener(listener);
      }
   }

仅当JTextField上的constrained属性发生更改时,才会调用VetoableChangeListener。受约束属性是其setter方法引发
PropertyVetoException
的属性。因此,如果您的代码从未在JTextField上调用任何此类setter方法,那么您的侦听器将永远不会被调用。阅读更多细节


我在API文档的JTextField(及其所有类hirarchy)中未找到任何受约束的属性,因此我怀疑是否可以调用您的侦听器。

只有在JTextField上更改了受约束的属性时,才会调用VetoableChangeListener。受约束属性是其setter方法引发
PropertyVetoException
的属性。因此,如果您的代码从未在JTextField上调用任何此类setter方法,那么您的侦听器将永远不会被调用。阅读更多细节


我在API文档中的JTextField(以及它的所有类hirarchy)中没有找到任何受约束的属性,因此我怀疑您的侦听器是否能够被调用。

要更快地获得更好的帮助,请发布SSCCE()。使用标准的J2SE类,而不是像“WizardTextField”这样的第三方类对它来说是很重要的。我会删除WizardTextField,但是我会直接调用“field.addVetoableChangeListener”,你会因为我没有提供足够的信息而责备我。据我所知,这是问题的一部分。如果你阅读sscce上的链接,你就会知道如果它没有证明问题,它就不是sscce。请阅读andrew提供的链接。我总共删除了4行代码,将代码总量减少到26行,包括空行。安德鲁·汤普森,我在等待你的解决方案。@Hovercraft,TomcatConfigPanel也不是标准的J2SE,但由于明显的原因,我无法删除它。WizardTextField很可能是问题的一部分,所以我认为我也无法消除它。如果问题明显,请指出错误所在或可能所在。否则,我自己会得出结论,这是另一回事,尽管这可能是由于一些不可预见的行为造成的,比如所有侦听器都被删除或诸如此类。为了更快地获得更好的帮助,请发布SSCCE()。使用标准的J2SE类,而不是像“WizardTextField”这样的第三方类对它来说是很重要的。我会删除WizardTextField,但是我会直接调用“field.addVetoableChangeListener”,你会因为我没有提供足够的信息而责备我。据我所知,这是问题的一部分。如果你阅读sscce上的链接,你就会知道如果它没有证明问题,它就不是sscce。请阅读andrew提供的链接。我总共删除了4行代码,将代码总量减少到26行,包括空行。安德鲁·汤普森,我在等待你的解决方案。@Hovercraft,TomcatConfigPanel也不是标准的J2SE,但由于明显的原因,我无法删除它。WizardTextField很可能是问题的一部分,所以我认为我也无法消除它。如果问题明显,请指出错误所在或可能所在。否则,我自己会得出结论,这是另外一回事,尽管这是由于一些不可预见的行为,比如所有的听众都被撤走或诸如此类的事情。这太差劲了。为什么他们会有这样一个听众,如果它永远不会被调用?感谢您的输入。addVetoableChangeListener方法位于JComponent中:他们将其放在所有Swing组件的基类中,以便它们不费吹灰之力就支持受约束的属性及其关联的侦听器。但是JTextField没有。事实上,似乎只有JInternalFrame在标准swing组件中具有构造属性。这太差劲了。为什么他们会有这样一个听众,如果它永远不会被调用?感谢您的输入。addVetoableChangeListener方法位于JComponent中:他们将其放在所有Swing组件的基类中,以便它们不费吹灰之力就支持受约束的属性及其关联的侦听器。但是JTextField没有。事实上,似乎只有JInternalFrame在标准swing组件中具有构造属性。