JavaFX选择框允许用户在几个选项之间快速选择。

创建一个选择框

我们可以使用ChoiceBox中的构造函数来创建ChoiceBox对象。
以下代码显示了如何使用其构造函数创建和填充选择框。 列表项是从可观察的列表来创建的。

  1. ChoiceBox cb =newChoiceBox(FXCollections.observableArrayList("A","B","C"));

我们还可以使用一个空的选择框使用它的默认构造函数,并使用setItems方法设置列表项。

  1. ChoiceBox cb = new ChoiceBox();
  2. cb.setItems(FXCollections.observableArrayList(
  3. "A", "B", new Separator(), "C", "D")
  4. );

上面的代码还向选择框中添加了一个分隔符对象。分隔符分隔控件项目。

例子1

  1. import javafx.application.Application;
  2. import javafx.beans.value.ChangeListener;
  3. import javafx.beans.value.ObservableValue;
  4. import javafx.collections.FXCollections;
  5. import javafx.geometry.Insets;
  6. import javafx.geometry.Pos;
  7. import javafx.scene.Group;
  8. import javafx.scene.Scene;
  9. import javafx.scene.control.ChoiceBox;
  10. import javafx.scene.control.Label;
  11. import javafx.scene.control.Tooltip;
  12. import javafx.scene.layout.HBox;
  13. import javafx.scene.paint.Color;
  14. import javafx.scene.shape.Rectangle;
  15. import javafx.stage.Stage;
  16. public class Main extends Application {
  17. public static void main(String[] args) {
  18. launch(args);
  19. }
  20. @Override
  21. public void start(Stage stage) {
  22. Group root = new Group();
  23. ChoiceBox<String> cb = new ChoiceBox<String>(FXCollections.observableArrayList("a", "b", "c", "d", "e"));
  24. //默认值
  25. cb.setValue("a");
  26. root.getChildren().add(cb);
  27. Scene scene = new Scene(root,300,300);
  28. stage.setScene(scene);
  29. stage.show();
  30. }
  31. }

例子2

  1. import javafx.application.Application;
  2. import javafx.beans.value.ChangeListener;
  3. import javafx.beans.value.ObservableValue;
  4. import javafx.collections.FXCollections;
  5. import javafx.geometry.Insets;
  6. import javafx.geometry.Pos;
  7. import javafx.scene.Group;
  8. import javafx.scene.Scene;
  9. import javafx.scene.control.ChoiceBox;
  10. import javafx.scene.control.Label;
  11. import javafx.scene.control.Tooltip;
  12. import javafx.scene.layout.HBox;
  13. import javafx.scene.paint.Color;
  14. import javafx.scene.shape.Rectangle;
  15. import javafx.stage.Stage;
  16. public class Main extends Application {
  17. final Label label = new Label("Hello");
  18. public static void main(String[] args) {
  19. launch(args);
  20. }
  21. @Override
  22. public void start(Stage stage) {
  23. Rectangle rect = new Rectangle(150, 30);
  24. Scene scene = new Scene(new Group());
  25. scene.setFill(Color.ALICEBLUE);
  26. stage.setScene(scene);
  27. stage.show();
  28. stage.setWidth(300);
  29. stage.setHeight(200);
  30. label.setStyle("-fx-font: 25 arial;");
  31. label.setLayoutX(40);
  32. rect.setStroke(Color.BLUE);
  33. rect.setStrokeWidth(3);
  34. rect.setFill(Color.WHITE);
  35. final String[] greetings = new String[] { "A", "B", "C", "D", "E" };
  36. final ChoiceBox<String> cb = new ChoiceBox<String>(
  37. FXCollections.observableArrayList("a", "b", "c", "d", "e"));
  38. cb.getSelectionModel().selectedIndexProperty()
  39. .addListener(new ChangeListener<Number>() {
  40. public void changed(ObservableValue ov, Number value, Number new_value) {
  41. label.setText(greetings[new_value.intValue()]);
  42. }
  43. });
  44. cb.setTooltip(new Tooltip("Select the language"));
  45. cb.setValue("English");
  46. HBox hb = new HBox();
  47. hb.getChildren().addAll(cb, label);
  48. hb.setSpacing(30);
  49. hb.setAlignment(Pos.CENTER);
  50. hb.setPadding(new Insets(10, 0, 0, 10));
  51. ((Group) scene.getRoot()).getChildren().add(hb);
  52. }
  53. }

Video_2022-04-28_161022.wmv (157.75KB)

例子3

以下代码显示了如何在ChoiceBox中填充数据。

  1. import javafx.application.Application;
  2. import javafx.collections.FXCollections;
  3. import javafx.collections.ObservableList;
  4. import javafx.scene.Cursor;
  5. import javafx.scene.Scene;
  6. import javafx.scene.control.ChoiceBox;
  7. import javafx.scene.layout.VBox;
  8. import javafx.scene.text.Font;
  9. import javafx.scene.text.Text;
  10. import javafx.stage.Stage;
  11. import javafx.stage.StageStyle;
  12. public class Main extends Application {
  13. ObservableList cursors = FXCollections.observableArrayList(
  14. Cursor.DEFAULT,
  15. Cursor.CROSSHAIR,
  16. Cursor.WAIT,
  17. Cursor.TEXT,
  18. Cursor.HAND,
  19. Cursor.MOVE,
  20. Cursor.N_RESIZE,
  21. Cursor.NE_RESIZE,
  22. Cursor.E_RESIZE,
  23. Cursor.SE_RESIZE,
  24. Cursor.S_RESIZE,
  25. Cursor.SW_RESIZE,
  26. Cursor.W_RESIZE,
  27. Cursor.NW_RESIZE,
  28. Cursor.NONE
  29. );
  30. @Override
  31. public void start(Stage stage) {
  32. ChoiceBox choiceBoxRef = new ChoiceBox(cursors);
  33. VBox box = new VBox();
  34. box.getChildren().add(choiceBoxRef);
  35. final Scene scene = new Scene(box,300, 250);
  36. scene.setFill(null);
  37. stage.setScene(scene);
  38. stage.show();
  39. scene.cursorProperty().bind(choiceBoxRef.getSelectionModel()
  40. .selectedItemProperty());
  41. }
  42. public static void main(String[] args) {
  43. launch(args);
  44. }
  45. }

Video_2022-04-28_161022.wmv (201.9KB)