Return组合框javafx的选择
Return the choice of a combobox javafx
我有一个带有 2 个 ComboBox 的应用程序,我想 return 将用户的选择放入一个变量中。我应该怎么做?
这是我的控制器 class :
package ch.makery.adress;
import java.awt.FileDialog;
import javafx.fxml.Initializable;
import java.net.URL;
import java.util.ResourceBundle;
import javax.swing.JFrame;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
public class HexaController implements Initializable {
static JFrame fileDialog;
@FXML
private ComboBox<String> hexa;
ObservableList<String> list = FXCollections.observableArrayList();
@FXML
private TextField entree;
@FXML
private TextField excel;
@FXML
private TextField sortie;
@FXML
private void dar(ActionEvent event){
FileDialog fd1=new FileDialog(fileDialog,"Choisissez un fichier d'entree",FileDialog.LOAD);
fd1.setDirectory("C:\");
fd1.setVisible(true);
String filename1=fd1.getFile();
String Directory1=fd1.getDirectory();
String path1=Directory1 + filename1;
entree.setText(path1);
}
@FXML
private void modele(ActionEvent event){
JFrame parentFrame=new JFrame();
FileDialog filechooser = new FileDialog (parentFrame, "Choisir un modèle Excel à copier",FileDialog.LOAD);
filechooser.setDirectory("C:\");
filechooser.setVisible(true);
String directory_copy = filechooser.getDirectory();
String name_copy= filechooser.getFile();
String path_copy = (directory_copy+name_copy);
excel.setText(path_copy);
}
@FXML
private void sortie (ActionEvent event){
JFrame parentFrame2=new JFrame();
FileDialog filechooser2 = new FileDialog (parentFrame2, "Choisir une destination d'enregistrement",FileDialog.SAVE);
filechooser2.setDirectory("C:\");
filechooser2.setVisible(true);
String directory_save = filechooser2.getDirectory();
String name_save= filechooser2.getFile();
String path_save = (directory_save+name_save+".xls");
sortie.setText(path_save);
}
@FXML
private void annuler (ActionEvent event){
System.exit(0);
}
@FXML
private ComboBox<Integer>methode;
ObservableList<Integer>nombre = FXCollections.observableArrayList();
public HexaController(){
}
public void initialize(URL url,ResourceBundle rb){
list.add(new String("OUI"));
list.add(new String("NON"));
hexa.setItems(list);
nombre.add(new Integer(0));
nombre.add(new Integer(1));
nombre.add(new Integer(2));
nombre.add(new Integer(3));
nombre.add(new Integer(4));
nombre.add(new Integer(5));
methode.setItems(nombre);
}
}
我需要使用该变量来更改应用程序的运行方式。在 "methode" 组合框上,我想要一个带有多个 TextField 的新 window。例如,如果用户选择 3,它将打开一个新的 window 和 3 textField 或(如果可能,只需在组合框下方添加 3 TestField)
谢谢
要访问 JavaFX 中 ComboBox 的选定值,试试这个:
hexa.getSelectionModel().getSelectedItem()
此returns所选项目。在您的情况下,它是您在 private ComboBox<String> hexa;
行中声明的字符串
我希望我现在明白了。对于您的第二个 ComboBox "methode",您想拥有诸如“1”、“2”、“3”等选项吗?在那里你可以像我们之前做的一样得到选择的项目:
methode.getSelectionModel().getSelectedItem()
或者如果您希望您的程序在您的 "methode" ComboBox 上单击一个值时立即打开一个新的 window,您必须添加一个 ValueChangedListener
以在值是更改,然后使用上面的代码获取所选项目,并使用所选项目的信息打开一个新的 window。
为了进一步研究,我建议查看来自 Oracle 的这个站点:https://docs.oracle.com/javafx/2/ui_controls/combo-box.htm
也许有一些对您来说很有趣的补充。
希望对您有所帮助。
编辑:
静态问题
像这样尝试一下。这对我有用。
private ComboBox<String> hexa;
private Button changeBehavior;
changeBehavior.setOnAction.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
String userChoice = hexa.getSelectionModel().getSelectedItem()
// do something with that string
}
});
方法组合框:
private ComboBox<Integer>methode;
methode.setOnAction((event) -> {
int number = methode.getSelectionModel().getSelectedItem()
paneYouWantToChange.getChildren().clear() // removes all displayed item
/*Or if you want to replace somehting in your pane*/
paneYouWantToChange.getChildren().set(indexOfItemToReplace, new TextField())
/*Add new textfields*/
paneYouWantToChange.getChildren().addAll(new TextField(), new TextField())
});
我有一个带有 2 个 ComboBox 的应用程序,我想 return 将用户的选择放入一个变量中。我应该怎么做? 这是我的控制器 class :
package ch.makery.adress;
import java.awt.FileDialog;
import javafx.fxml.Initializable;
import java.net.URL;
import java.util.ResourceBundle;
import javax.swing.JFrame;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;
public class HexaController implements Initializable {
static JFrame fileDialog;
@FXML
private ComboBox<String> hexa;
ObservableList<String> list = FXCollections.observableArrayList();
@FXML
private TextField entree;
@FXML
private TextField excel;
@FXML
private TextField sortie;
@FXML
private void dar(ActionEvent event){
FileDialog fd1=new FileDialog(fileDialog,"Choisissez un fichier d'entree",FileDialog.LOAD);
fd1.setDirectory("C:\");
fd1.setVisible(true);
String filename1=fd1.getFile();
String Directory1=fd1.getDirectory();
String path1=Directory1 + filename1;
entree.setText(path1);
}
@FXML
private void modele(ActionEvent event){
JFrame parentFrame=new JFrame();
FileDialog filechooser = new FileDialog (parentFrame, "Choisir un modèle Excel à copier",FileDialog.LOAD);
filechooser.setDirectory("C:\");
filechooser.setVisible(true);
String directory_copy = filechooser.getDirectory();
String name_copy= filechooser.getFile();
String path_copy = (directory_copy+name_copy);
excel.setText(path_copy);
}
@FXML
private void sortie (ActionEvent event){
JFrame parentFrame2=new JFrame();
FileDialog filechooser2 = new FileDialog (parentFrame2, "Choisir une destination d'enregistrement",FileDialog.SAVE);
filechooser2.setDirectory("C:\");
filechooser2.setVisible(true);
String directory_save = filechooser2.getDirectory();
String name_save= filechooser2.getFile();
String path_save = (directory_save+name_save+".xls");
sortie.setText(path_save);
}
@FXML
private void annuler (ActionEvent event){
System.exit(0);
}
@FXML
private ComboBox<Integer>methode;
ObservableList<Integer>nombre = FXCollections.observableArrayList();
public HexaController(){
}
public void initialize(URL url,ResourceBundle rb){
list.add(new String("OUI"));
list.add(new String("NON"));
hexa.setItems(list);
nombre.add(new Integer(0));
nombre.add(new Integer(1));
nombre.add(new Integer(2));
nombre.add(new Integer(3));
nombre.add(new Integer(4));
nombre.add(new Integer(5));
methode.setItems(nombre);
}
}
我需要使用该变量来更改应用程序的运行方式。在 "methode" 组合框上,我想要一个带有多个 TextField 的新 window。例如,如果用户选择 3,它将打开一个新的 window 和 3 textField 或(如果可能,只需在组合框下方添加 3 TestField) 谢谢
要访问 JavaFX 中 ComboBox 的选定值,试试这个:
hexa.getSelectionModel().getSelectedItem()
此returns所选项目。在您的情况下,它是您在 private ComboBox<String> hexa;
我希望我现在明白了。对于您的第二个 ComboBox "methode",您想拥有诸如“1”、“2”、“3”等选项吗?在那里你可以像我们之前做的一样得到选择的项目:
methode.getSelectionModel().getSelectedItem()
或者如果您希望您的程序在您的 "methode" ComboBox 上单击一个值时立即打开一个新的 window,您必须添加一个 ValueChangedListener
以在值是更改,然后使用上面的代码获取所选项目,并使用所选项目的信息打开一个新的 window。
为了进一步研究,我建议查看来自 Oracle 的这个站点:https://docs.oracle.com/javafx/2/ui_controls/combo-box.htm
也许有一些对您来说很有趣的补充。
希望对您有所帮助。
编辑:
静态问题
像这样尝试一下。这对我有用。
private ComboBox<String> hexa;
private Button changeBehavior;
changeBehavior.setOnAction.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
String userChoice = hexa.getSelectionModel().getSelectedItem()
// do something with that string
}
});
方法组合框:
private ComboBox<Integer>methode;
methode.setOnAction((event) -> {
int number = methode.getSelectionModel().getSelectedItem()
paneYouWantToChange.getChildren().clear() // removes all displayed item
/*Or if you want to replace somehting in your pane*/
paneYouWantToChange.getChildren().set(indexOfItemToReplace, new TextField())
/*Add new textfields*/
paneYouWantToChange.getChildren().addAll(new TextField(), new TextField())
});