簡體   English   中英

為什么我不能從事件偵聽器調用方法,而不能在類中的其他地方調用方法?

[英]Why can't I call method from event listener but can elsewhere in class?

我在JavaFX GUI的控制器類中具有以下代碼,該類為組合框提供了事件偵聽器:

courseComboBox.getSelectionModel().selectedItemProperty()
                .addListener(new ChangeListener<String>() {
                    @Override
                    public void changed(
                            ObservableValue<? extends String> selected,
                            String oldValue, String newValue) {

                           // Do stuff

    }
});

但是,當我嘗試從其中調用另一個方法時,我無法:

courseComboBox.getSelectionModel().selectedItemProperty()
                    .addListener(new ChangeListener<String>() {
                        @Override
                        public void changed(
                                ObservableValue<? extends String> selected,
                                String oldValue, String newValue) {

                                this.setClassList(courseProcessed);

                               // Do Stuff

   }
});

不過,我可以在類中的其他地方調用該方法。 更具體地說,我可以在該偵聽器也駐留的控制器中的initialize()函數內調用它。為什么會有這個問題?

因為this聽者內指的是監聽當前實例,而不是控制器實例。 要引用容器實例,請使用語法ControllerClassName.this

這里的問題是:

new ChangeListener<String>() {
   @Override
   public void changed(ObservableValue<? extends String> selected, String oldValue, String newValue) {
       this.setClassList(courseProcessed);// `this` refers to the current instance of the anonymous class `ChangeListener`
   }
}

在此匿名類ChangeListener ,沒有名為setClassList()方法,因此編譯器對此有所抱怨。 您可以嘗試避免使用this關鍵字:

setClassList(courseProcessed);

要么

您也可以嘗試以下方法:

YourClass.this.setClassList(courseProcessed);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM