16 ã³ã³ãã»ããã¯ã¹
ãã®ç« ã§ã¯ãJavaFXã¢ããªã±ãŒã·ã§ã³ã§ã³ã³ãã»ããã¯ã¹ã䜿çšããæ¹æ³ã«ã€ããŠèª¬æããŸãã ããã§ã¯ç·šéå¯èœãããã³ç·šéäžå¯ã®ã³ã³ãã»ããã¯ã¹ã«ã€ããŠèª¬æããç·šéå¯èœãªã³ã³ãã»ããã¯ã¹ã§ã®å€æŽã®è¿œè·¡æ¹æ³ãšãã®ã€ãã³ãã®åŠçæ¹æ³ã«ã€ããŠåŠç¿ããã³ã³ãã»ããã¯ã¹ã®ããã©ã«ãã®å®è£ ã«ä»£ããã»ã«ã»ãã¡ã¯ããªã®äœ¿ç𿹿³ã«ã€ããŠèª¬æããŸãã
ã³ã³ãã»ããã¯ã¹ã¯ããŠãŒã¶ãŒãè€æ°ã®ãªãã·ã§ã³ãã1ã€ãéžæã§ãããŠãŒã¶ãŒã»ã€ã³ã¿ãã§ãŒã¹ã®äžè¬çãªèŠçŽ ã§ãã ã³ã³ãã»ããã¯ã¹ã¯éžæããã¯ã¹ãšã¯ç°ãªããããããããŠã³ã»ãªã¹ãã«ã¹ã¯ããŒã«ã远å ã§ããããã衚瀺ããé ç®ã®æ°ãäžå®ã®å¶éãè¶ ããå Žåã«åœ¹ç«ã¡ãŸãã é ç®ã®æ°ãç¹å®ã®å¶éãè¶ ããŠããªãå Žåãéçºè ã¯ã³ã³ãã»ããã¯ã¹ãšéžæããã¯ã¹ã®ã©ã¡ããããŒãºã«äžèŽãããã倿ããå¿ èŠããããŸãã
JavaFXã¢ããªã±ãŒã·ã§ã³ã§ã³ã³ãã»ããã¯ã¹ãäœæããã«ã¯ãJavaFX APIã®ComboBoxã¯ã©ã¹ã䜿çšããŸãã å³16-1ã«ã2ã€ã®ã³ã³ãã»ããã¯ã¹ã®ããã¢ããªã±ãŒã·ã§ã³ã瀺ããŸãã
å³16-1 2ã€ã®ã³ã³ãã»ããã¯ã¹ã®ããã¢ããªã±ãŒã·ã§ã³

ãå³16-1 2ã€ã®ã³ã³ãã»ããã¯ã¹ã®ããã¢ããªã±ãŒã·ã§ã³ãã®èª¬æ
ã³ã³ãã»ããã¯ã¹ã®äœæ
ã³ã³ãã»ããã¯ã¹ãäœæããå ŽåãChoiceBoxãListViewãããã³TableViewãªã©ãä»ã®UIã³ã³ãããŒã«ãšåæ§ã«ãComboBoxã¯ã©ã¹ãã€ã³ã¹ã¿ã³ã¹åããé
ç®ãç£èŠå¯èœãªã¹ããšããŠå®çŸ©ããå¿
èŠããããŸãã äŸ16-1ã§ã¯ãã³ã³ã¹ãã©ã¯ã¿å
ã«é
ç®ãèšå®ããŸãã
äŸ16-1 ç£èŠå¯èœãªãªã¹ãã䜿çšããã³ã³ãã»ããã¯ã¹ã®äœæ
ObservableList<String> options =
FXCollections.observableArrayList(
"Option 1",
"Option 2",
"Option 3"
);
final ComboBox comboBox = new ComboBox(options);
ãã®ä»ã®éžæè¢ãšããŠã¯ã空ã®ã³ã³ã¹ãã©ã¯ã¿ã䜿çšããŠãããã«setItemsã¡ãœãããcomboBox.setItems(options);ã®ããã«ã³ãŒã«ããŠã³ã³ãã»ããã¯ã¹ãäœæããŸãã
ã³ã³ãã»ããã¯ã¹ãã¢ããªã±ãŒã·ã§ã³ã»ã·ãŒã³ã«è¿œå ããããšãå³16-2ã«ç€ºãããã«ãŠãŒã¶ãŒã»ã€ã³ã¿ãã§ãŒã¹ã«è¡šç€ºãããŸãã
å³16-2 3ã€ã®é ç®ã®ããã³ã³ãã»ããã¯ã¹

ãå³16-2 3ã€ã®é ç®ã®ããã³ã³ãã»ããã¯ã¹ãã®èª¬æ
é ç®ã®ãªã¹ãã«ã¯ãåžžã«æ°ããå€ã远å ã§ããŸãã äŸ16-2ã§ã¯ã3ã€ã®é ç®ãcomboBoxã³ã³ãããŒã«ã«è¿œå ããŠãã®ã¿ã¹ã¯ãå®è£ ããŠããŸãã
äŸ16-2 ã³ã³ãã»ããã¯ã¹ãžã®é ç®ã®è¿œå
comboBox.getItems().addAll(
"Option 4",
"Option 5",
"Option 6"
);
ComboBoxã¯ã©ã¹ã¯ãã®ã³ã³ãã»ããã¯ã¹ã§äœ¿çšã§ããç°¡åãªããããã£ãšã¡ãœãããæäŸããŸãã
setValueã¡ãœããã䜿çšãããšãã³ã³ãã»ããã¯ã¹ã§éžæãããé
ç®ãæå®ã§ããŸãã ComboBoxãªããžã§ã¯ãã«setValueã¡ãœãããã³ãŒã«ãããšãselectionModelããããã£ã§éžæãããé
ç®ã¯ãå€ãã³ã³ãã»ããã¯ã¹é
ç®ã®ãªã¹ãã«ãªããŠãããã®å€ã«å€æŽãããŸãã æ¬¡ã«ããã®å€ãå«ãããé
ç®ãªã¹ãã倿Žããããšã該åœããé
ç®ãéžæãããŸãã
åæ§ã«ãgetValueã¡ãœãããã³ãŒã«ãããšãéžæãããé
ç®ã®å€ãååŸã§ããŸãã ãŠãŒã¶ãŒãé
ç®ãéžæãããšãselectionModelããããã£ã®éžæãããé
ç®ãšã³ã³ãã»ããã¯ã¹ã®valueããããã£ã®äž¡æ¹ãæ°ããå€ã«æŽæ°ãããŸãã
è¡ã衚瀺ããå Žåã¯ãComboBoxããããããŠã³ã»ãªã¹ãã«è¡šç€ºå¯èœãªè¡æ°ãå¶éããããšãã§ããŸãã comboBoxã³ã³ãããŒã«ã§3ã€ã®é
ç®ã®è¡šç€ºãå¯èœã«ããã«ã¯ã次ã®ã³ãŒãè¡comboBox.setVisibleRowCount(3)ã䜿çšããŸãããã®ã¡ãœãããã³ãŒã«ããçµæãå³16-3ã«ç€ºãããã«ã衚瀺å¯èœãªè¡ã¯3è¡ã«å¶éãããã¹ã¯ããŒã«ã»ããŒã衚瀺ãããŸãã
å³16-3 ã³ã³ãã»ããã¯ã¹ã«è¡šç€ºå¯èœãªè¡æ°ã®èšå®

ãå³16-3 ã³ã³ãã»ããã¯ã¹ã«è¡šç€ºå¯èœãªè¡æ°ã®èšå®ãã®èª¬æ
ComboBoxã¯ã©ã¹ã«ã¯äžè¬çãªè¡šèšæ³ããããæ§ã
ãªã¿ã€ãã®é
ç®ãžã®ãŠãŒã¶ãŒã«ããããŒã¿ç§»å
¥ãæå¹ã«ã§ããŸãããNodeããŸãã¯ãã®ä»ã®ãµãã¯ã©ã¹ã¯ã¿ã€ããšããŠäœ¿çšããªãã§ãã ããã ã·ãŒã³ã»ã°ã©ãã®æŠå¿µã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã»ã·ãŒã³ã®1ã€ã®å Žæã«é
眮ã§ããNodeãªããžã§ã¯ãã¯1ã€ã®ã¿ã§ãããšãããŠãããããéžæãããé
ç®ã¯ãé
ç®ã®ComboBoxãªã¹ãããåé€ãããŸãã éžæã倿Žãããšãæåã«éžæããŠããé
ç®ããªã¹ãã«æ»ãããæ°ããéžæãåé€ãããŸãã ãã®ç¶æ³ã鲿¢ããã«ã¯ãã»ã«ã»ãã¡ã¯ããªã»ã¡ã«ããºã ãšAPIããã¥ã¡ã³ãã«èšèŒãããŠãããœãªã¥ãŒã·ã§ã³ã䜿çšããŸãã ã»ã«ã»ãã¡ã¯ããªã®ã¡ã«ããºã ã¯ãComboBoxãªããžã§ã¯ãã®åæã®åäœãŸãã¯å€èгã倿Žããå¿
èŠãããå Žåã«ç¹ã«åœ¹ç«ã¡ãŸãã
ComboBoxSampleã¢ããªã±ãŒã·ã§ã³ã¯ãäžè¬çãªé»åã¡ãŒã«ã»ã€ã³ã¿ãã§ãŒã¹ã§ã³ã³ãã»ããã¯ã¹ã䜿çšããæ¹æ³ã瀺ãããèšèšãããŠããŸãã äŸ16-3ã§ã¯ããã®ãããªã€ã³ã¿ãã§ãŒã¹ãäœæãã2ã€ã®ã³ã³ãã»ããã¯ã¹ã䜿çšããŠé»åã¡ãŒã«ã®åä¿¡è ãšã¡ãã»ãŒãžã®åªå 床ãéžæã§ããããã«ããŸãã
äŸ16-3 ã³ã³ãã»ããã¯ã¹ã®äœæããã³ã·ãŒã³ãžã®è¿œå
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class ComboBoxSample extends Application {
public static void main(String[] args) {
launch(args);
}
final Button button = new Button ("Send");
final Label notification = new Label ();
final TextField subject = new TextField("");
final TextArea text = new TextArea ("");
String address = " ";
@Override public void start(Stage stage) {
stage.setTitle("ComboBoxSample");
Scene scene = new Scene(new Group(), 500, 270);
final ComboBox emailComboBox = new ComboBox();
emailComboBox.getItems().addAll(
"jacob.smith@example.com",
"isabella.johnson@example.com",
"ethan.williams@example.com",
"emma.jones@example.com",
"michael.brown@example.com"
);
final ComboBox priorityComboBox = new ComboBox();
priorityComboBox.getItems().addAll(
"Highest",
"High",
"Normal",
"Low",
"Lowest"
);
priorityComboBox.setValue("Normal");
GridPane grid = new GridPane();
grid.setVgap(4);
grid.setHgap(10);
grid.setPadding(new Insets(5, 5, 5, 5));
grid.add(new Label("To: "), 0, 0);
grid.add(emailComboBox, 1, 0);
grid.add(new Label("Priority: "), 2, 0);
grid.add(priorityComboBox, 3, 0);
grid.add(new Label("Subject: "), 0, 1);
grid.add(subject, 1, 1, 3, 1);
grid.add(text, 0, 2, 4, 1);
grid.add(button, 0, 3);
grid.add (notification, 1, 3, 3, 1);
Group root = (Group)scene.getRoot();
root.getChildren().add(grid);
stage.setScene(scene);
stage.show();
}
}
äŸ16-3ã«ç€ºãã³ã³ãã»ããã¯ã¹ã¯ãã©ã¡ããgetItemsã¡ãœãããšaddAllã¡ãœããã䜿çšããŠé
ç®ã远å ããŸãã ãã®ã³ãŒããã³ã³ãã€ã«ããŠå®è¡ãããšãå³16-4ã«ç€ºãã¢ããªã±ãŒã·ã§ã³ã»ãŠã£ã³ããŠãäœæãããŸãã
å³16-4 é»åã¡ãŒã«åä¿¡è ããã³åªå 床ã®ã³ã³ãã»ããã¯ã¹

ãå³16-4 é»åã¡ãŒã«åä¿¡è ããã³åªå 床ã®ã³ã³ãã»ããã¯ã¹ãã®èª¬æ
ç·šéå¯èœãªã³ã³ãã»ããã¯ã¹
éåžžãé»åã¡ãŒã«ã»ã¯ã©ã€ã¢ã³ãã»ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããŠãŒã¶ãŒã¯ã¢ãã¬ã¹åž³ããã®åä¿¡è
ã®éžæãããã³æ°ããã¢ãã¬ã¹ã®å
¥åãå¯èœã§ãã ãã®ãããªã¿ã¹ã¯ã«ã¯ãç·šéå¯èœãªã³ã³ãã»ããã¯ã¹ãæãé©ããŠããŸãã ComboBoxã¯ã©ã¹ã®setEditable(true)ã¡ãœããã䜿çšããŠãã³ã³ãã»ããã¯ã¹ãç·šéå¯èœã«ããŸãã setPromptTextã¡ãœããã§ã¯ãäœãéžæãããŠããªããšãã«ã³ã³ãã»ããã¯ã¹ã®ç·šéé åã«è¡šç€ºããããã¹ããæå®ã§ããŸãã äŸ16-4ã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®å€æŽã³ãŒãã確èªããŸãã 倪åã®è¡ãäŸ16-3ã«è¿œå ãããéšåã§ãã
äŸ16-4 ç·šéå¯èœã³ã³ãã»ããã¯ã¹ã«æ°ãã«å ¥åãããå€ã®åŠç
import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.Event; import javafx.geometry.Insets; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.GridPane; import javafx.stage.Stage; public class ComboBoxSample extends Application { public static void main(String[] args) { launch(args); } final Button button = new Button ("Send"); final Label notification = new Label (); final TextField subject = new TextField(""); final TextArea text = new TextArea (""); String address = " "; @Override public void start(Stage stage) { stage.setTitle("ComboBoxSample"); Scene scene = new Scene(new Group(), 500, 270); final ComboBox emailComboBox = new ComboBox(); emailComboBox.getItems().addAll( "jacob.smith@example.com", "isabella.johnson@example.com", "ethan.williams@example.com", "emma.jones@example.com", "michael.brown@example.com" ); emailComboBox.setPromptText("Email address"); emailComboBox.setEditable(true); emailComboBox.setOnAction((Event ev) -> { address = emailComboBox.getSelectionModel().getSelectedItem().toString(); }); final ComboBox priorityComboBox = new ComboBox(); priorityComboBox.getItems().addAll( "Highest", "High", "Normal", "Low", "Lowest" ); priorityComboBox.setValue("Normal"); button.setOnAction((ActionEvent e) -> { if (emailComboBox.getValue() != null && !emailComboBox.getValue().toString().isEmpty()){ notification.setText("Your message was successfully sent" + " to " + address); emailComboBox.setValue(null); if (priorityComboBox.getValue() != null && !priorityComboBox.getValue().toString().isEmpty()){ priorityComboBox.setValue(null); } subject.clear(); text.clear(); } else { notification.setText("You have not selected a recipient!"); } }); GridPane grid = new GridPane(); grid.setVgap(4); grid.setHgap(10); grid.setPadding(new Insets(5, 5, 5, 5)); grid.add(new Label("To: "), 0, 0); grid.add(emailComboBox, 1, 0); grid.add(new Label("Priority: "), 2, 0); grid.add(priorityComboBox, 3, 0); grid.add(new Label("Subject: "), 0, 1); grid.add(subject, 1, 1, 3, 1); grid.add(text, 0, 2, 4, 1); grid.add(button, 0, 3); grid.add (notification, 1, 3, 3, 1); Group root = (Group)scene.getRoot(); root.getChildren().add(grid); stage.setScene(scene); stage.show(); } }
emailComboBoxãç·šéã§ããä»ã«ããã®ã³ãŒãã»ãã©ã°ã¡ã³ãã¯ãã®ã³ã³ãããŒã«ã®ã€ãã³ãåŠçãå®è£
ããŸãã æ°ãã«å
¥åããŸãã¯éžæããå€ã¯address倿°ã«æ ŒçŽãããŸãã ãŠãŒã¶ãŒããSendããã¿ã³ãæŒããšãé»åã¡ãŒã«ã»ã¢ãã¬ã¹ãå«ãéç¥ã衚瀺ãããŸãã
å³16-5ã¯ããŠãŒã¶ãŒãJacob Smithã®é»åã¡ãŒã«ã»ã¢ãã¬ã¹ãç·šéãããããgreg.smith@example.comã«å€æŽããç¬éã®ãã£ããã£ã瀺ããŸãã
å³16-5 é»åã¡ãŒã«ã»ã¢ãã¬ã¹ã®ç·šé

ãå³16-5 é»åã¡ãŒã«ã»ã¢ãã¬ã¹ã®ç·šéãã®èª¬æ
ãSendããã¿ã³ãæŒããšããã¹ãŠã®ã³ã³ãããŒã«ãããã©ã«ãã®ç¶æ
ã«æ»ããŸãã TextFieldãªããžã§ã¯ããšTextAreaãªããžã§ã¯ãã«å¯ŸããŠclearã¡ãœãããã³ãŒã«ãããã³ã³ãã»ããã¯ã¹ã®éžæãããé
ç®ã«nullå€ãèšå®ãããŸãã å³16-6ã«ããSendããã¿ã³ãæŒããåŸã®ç¬éã瀺ããŸãã
å³16-6 ãSendããã¿ã³ãæŒããåŸã®ãŠãŒã¶ãŒã»ã€ã³ã¿ãã§ãŒã¹

ãå³16-6 ãSendããã¿ã³ãæŒããåŸã®ãŠãŒã¶ãŒã»ã€ã³ã¿ãã§ãŒã¹ãã®èª¬æ
ã³ã³ãã»ããã¯ã¹ãžã®ã»ã«ã»ãã¡ã¯ããªã®é©çš
ã»ã«ã»ãã¡ã¯ããªã®ã¡ã«ããºã ã䜿çšãããšãã³ã³ãã»ããã¯ã¹ã®ããã©ã«ãã®åäœãŸãã¯å€èгã倿Žã§ããŸãã äŸ16-5ã§ã¯ãã»ã«ã»ãã¡ã¯ããªãäœæããããããPriorityãã³ã³ãã»ããã¯ã¹ã«é©çšããŠãåªå 床ã¿ã€ããç¹å¥ãªè²ã§åŒ·èª¿è¡šç€ºããŸãã
äŸ16-5 ãPriorityãã³ã³ãã»ããã¯ã¹ãžã®ã»ã«ã»ãã¡ã¯ããªã®å®è£
import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.Event; import javafx.geometry.Insets; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.GridPane; import javafx.scene.paint.Color; import javafx.stage.Stage; import javafx.util.Callback; public class ComboBoxSample extends Application { public static void main(String[] args) { launch(args); } final Button button = new Button ("Send"); final Label notification = new Label (); final TextField subject = new TextField(""); final TextArea text = new TextArea (""); String address = " "; @Override public void start(Stage stage) { stage.setTitle("ComboBoxSample"); Scene scene = new Scene(new Group(), 500, 270); final ComboBox emailComboBox = new ComboBox(); emailComboBox.getItems().addAll( "jacob.smith@example.com", "isabella.johnson@example.com", "ethan.williams@example.com", "emma.jones@example.com", "michael.brown@example.com" ); emailComboBox.setPromptText("Email address"); emailComboBox.setEditable(true); emailComboBox.setOnAction((Event ev) -> { address = emailComboBox.getSelectionModel().getSelectedItem().toString(); }); final ComboBox priorityComboBox = new ComboBox(); priorityComboBox.getItems().addAll( "Highest", "High", "Normal", "Low", "Lowest" ); priorityComboBox.setValue("Normal"); priorityComboBox.setCellFactory( new Callback<ListView<String>, ListCell<String>>() { @Override public ListCell<String> call(ListView<String> param) { final ListCell<String> cell = new ListCell<String>() { { super.setPrefWidth(100); } @Override public void updateItem(String item, boolean empty) { super.updateItem(item, empty); if (item != null) { setText(item); if (item.contains("High")) { setTextFill(Color.RED); } else if (item.contains("Low")){ setTextFill(Color.GREEN); } else { setTextFill(Color.BLACK); } } else { setText(null); } } }; return cell; } }); button.setOnAction((ActionEvent e) -> { if (emailComboBox.getValue() != null && !emailComboBox.getValue().toString().isEmpty()){ notification.setText("Your message was successfully sent" + " to " + address); emailComboBox.setValue(null); if (priorityComboBox.getValue() != null && !priorityComboBox.getValue().toString().isEmpty()){ priorityComboBox.setValue(null); } subject.clear(); text.clear(); } else { notification.setText("You have not selected a recipient!"); } }) GridPane grid = new GridPane(); grid.setVgap(4); grid.setHgap(10); grid.setPadding(new Insets(5, 5, 5, 5)); grid.add(new Label("To: "), 0, 0); grid.add(emailComboBox, 1, 0); grid.add(new Label("Priority: "), 2, 0); grid.add(priorityComboBox, 3, 0); grid.add(new Label("Subject: "), 0, 1); grid.add(subject, 1, 1, 3, 1); grid.add(text, 0, 2, 4, 1); grid.add(button, 0, 3); grid.add (notification, 1, 3, 3, 1); Group root = (Group)scene.getRoot(); root.getChildren().add(grid); stage.setScene(scene); stage.show(); } }
ã»ã«ã»ãã¡ã¯ããªã¯ListCellãªããžã§ã¯ããäœæããŸãã ãã¹ãŠã®ã»ã«ãåäžã®ã³ã³ãã»ããã¯ã¹é
ç®ãšé¢é£ä»ããããŸãã åã³ã³ãã»ããã¯ã¹é
ç®ã®å¹
ã¯ãsetPrefWidthã¡ãœããã䜿çšããŠèšå®ããŸãã updateItemã¡ãœããã¯ããHighãããã³ãHighestãã®é
ç®ã«å¯ŸããŠã¯èµ€ããLowãããã³ãLowestãã®é
ç®ã«å¯ŸããŠã¯ç·ã«èšå®ãããNormalãã®é
ç®ã«å¯ŸããŠã¯é»ã®ãŸãŸã§èšå®ã倿ŽããŸããã
å³16-7 ã¯ãäŸ16-5ãé©çšããåŸã®ãPriorityãã³ã³ãã»ããã¯ã¹ã®é ç®ã瀺ããŠããŸãã
å³16-7 倿ŽåŸã®ãPriorityãã³ã³ãã»ããã¯ã¹

ãå³16-7 倿ŽåŸã®ãPriorityãã³ã³ãã»ããã¯ã¹ãã®èª¬æ
ComboBoxã³ã³ãããŒã«ã®å€èгã¯ãCSSã¹ã¿ã€ã«ãèŠèŠå¹æãé©çšããŠããã«æ¡åŒµã§ããŸãã
é¢é£APIããã¥ã¡ã³ã

