Javafx 为选择框添加下拉事件监听器
Javafx add a dropdown event listener for choicebox
我有一个 ChoiceBox
,我想在用户展开它时刷新它的内容。我还没有为此找到合适的听众。 google 给出的所有内容都与处理 ChangeValue
事件有关。
我认为我应该将 eventListener<ActionEvent>
添加到 ChoiceBox
,因为我正在处理的是单击 ChoiceBox
,但我的实现不起作用。
ActionEvent 在我单击任何列表值时触发,而不是在我单击 ChoiceBox
本身时触发。
使用选择框的 showingProperty
:
注册监听器
choiceBox.showingProperty().addListener((obs, wasShowing, isNowShowing) -> {
if (isNowShowing) {
// choice box popup is now displayed
} else {
// choice box popup is now hidden
}
});
这是一个快速演示:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.ChoiceBox;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class ChoiceBoxPopupTest extends Application {
private int nextValue ;
@Override
public void start(Stage primaryStage) {
ChoiceBox<Integer> choiceBox = new ChoiceBox<>();
choiceBox.getItems().add(nextValue);
choiceBox.setValue(nextValue);
choiceBox.showingProperty().addListener((obs, wasShowing, isNowShowing) -> {
if (isNowShowing) {
choiceBox.getItems().setAll(++nextValue, ++nextValue, ++nextValue);
}
});
BorderPane root = new BorderPane();
root.setTop(choiceBox);
BorderPane.setAlignment(choiceBox, Pos.CENTER);
root.setPadding(new Insets(5));
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我有一个 ChoiceBox
,我想在用户展开它时刷新它的内容。我还没有为此找到合适的听众。 google 给出的所有内容都与处理 ChangeValue
事件有关。
我认为我应该将 eventListener<ActionEvent>
添加到 ChoiceBox
,因为我正在处理的是单击 ChoiceBox
,但我的实现不起作用。
ActionEvent 在我单击任何列表值时触发,而不是在我单击 ChoiceBox
本身时触发。
使用选择框的 showingProperty
:
choiceBox.showingProperty().addListener((obs, wasShowing, isNowShowing) -> {
if (isNowShowing) {
// choice box popup is now displayed
} else {
// choice box popup is now hidden
}
});
这是一个快速演示:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.ChoiceBox;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class ChoiceBoxPopupTest extends Application {
private int nextValue ;
@Override
public void start(Stage primaryStage) {
ChoiceBox<Integer> choiceBox = new ChoiceBox<>();
choiceBox.getItems().add(nextValue);
choiceBox.setValue(nextValue);
choiceBox.showingProperty().addListener((obs, wasShowing, isNowShowing) -> {
if (isNowShowing) {
choiceBox.getItems().setAll(++nextValue, ++nextValue, ++nextValue);
}
});
BorderPane root = new BorderPane();
root.setTop(choiceBox);
BorderPane.setAlignment(choiceBox, Pos.CENTER);
root.setPadding(new Insets(5));
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}