在对话框中单击“确定”时获取 Jtextfields 的值
get values of Jtextfields when click OK in Dialog
我的需要是在 JDialog(confirmDialog 或 inputDialog)中显示一个选项卡。该选项卡每行包含 2 个 JTextField。显示效果很好:
但我不知道如何获取 JTextFields 的值。
这里是显示代码:
int size = model.getCheckedApplications().size();
// une ligne par application sélectionnée
layout = new GridLayout(size + 1, 3, 5, 5);
myPanel = new JPanel(layout);
myPanel.add(new JLabel("Application"));
myPanel.add(new JLabel("Version cadre"));
myPanel.add(new JLabel("Nouvelles natures"));
for (Application app : model.getCheckedApplications()) {
myPanel.add(new JLabel(app.getCode88()));
JTextField versionActuelleField = new JTextField(30);
versionActuelleField.setName("versionActuelle"
+ app.getCode88());
versionActuelleField.setText(app
.getVersionCadreActuelle());
JTextField nouvellesNaturesField = new JTextField(
30);
nouvellesNaturesField.setName("nouvellesNatures"
+ app.getCode88());
myPanel.add(versionActuelleField);
myPanel.add(nouvellesNaturesField);
}
result = JOptionPane.showConfirmDialog(null, myPanel,
"Valeurs de cette version",
JOptionPane.OK_CANCEL_OPTION);
然后我不知道如何在用户单击“确定”按钮时获取值:
if (result == 0) { // The user clicks on the ok button
您使用 getText() 方法将 Jtextfield 值分配给一个字符串,例如下面
String texfield = JTextField.getText();
随后,您可以在任何需要的地方使用字符串文本字段。为了获得正确的 jtextfield,您必须从您想要的文本字段中获取文本,例如您有四个 Jtexfield。假设它们是 JTextField1、JTextField2、JTextField3 和 JTextField4。要获取 JTextField3 的值,您需要
String texfield = JTextField3.getText();
这些值应该在您创建的 JTextFields 中:
versionActuelleField
nouvellesNaturesField
此外,您可能想看看 ParamDialog,我将其实现为该问题的通用解决方案。
编辑
是的,我现在看到您正在循环创建这些 JTextFields
。因此,您需要创建一个 Collection
,我建议您创建一个 Map<String, JTextField>
,您可以在其中将所有应用程序名称映射到匹配的 JTextField
,并遍历集合以获取所有应用名称 / JTextFields
。
您需要将它们添加到您存储的某个列表中,以便您可以再次访问它们。由于您是在引用应用程序时添加它们,因此我建议使用 Map
private Map<Application, JTextField> nouvellesNaturesFields = new ArrayListMultimap<Application, JTextField>(); //Or Hashmap, if the key is unique
private Map<Application, JTextField> versionActuelleFields = new ArrayListMultiMap<Application, JTextField>();
public List<JTextField> getNouvellesNaturesFields() {
return nouvellesNaturesFields ;
}
public List<JTextField> getVersionActuelleFields () {
return versionActuelleFields ;
}
//class code
for (Application app : model.getCheckedApplications()) {
//Other code
JTextField nouvellesNaturesField = new JTextField(
30);
nouvellesNaturesField.setName("nouvellesNatures"
+ app.getCode88());
nouvellesNaturesFields.put(app, nouvellesNaturesField);
//Other code and same for your new nature fields
}
result = JOptionPane.showConfirmDialog(null, myPanel,
"Valeurs de cette version",
JOptionPane.OK_CANCEL_OPTION);
然后当用户单击确认按钮时,使用 属性 访问器 getNouvellesNaturesFields()
或 getVersionActuelleFields()
您可以迭代所有创建的字段,如下所示:
for (Map.Entry<Application, JTextField> entry: myMap.entries()) {
//Do something here
}
或者您也可以通过以下方式获取它们:
for (Application app : model.getCheckedApplications()) {
List<JTextField> data = myMap.get(app);
for(JTextField field : data) {
field.getText();
}
}
由于键值可能不是唯一的,我使用了一个 ArrayListMultiMap
, but if it would be unique, then a HashMap
就足够了
我的需要是在 JDialog(confirmDialog 或 inputDialog)中显示一个选项卡。该选项卡每行包含 2 个 JTextField。显示效果很好:
但我不知道如何获取 JTextFields 的值。
这里是显示代码:
int size = model.getCheckedApplications().size();
// une ligne par application sélectionnée
layout = new GridLayout(size + 1, 3, 5, 5);
myPanel = new JPanel(layout);
myPanel.add(new JLabel("Application"));
myPanel.add(new JLabel("Version cadre"));
myPanel.add(new JLabel("Nouvelles natures"));
for (Application app : model.getCheckedApplications()) {
myPanel.add(new JLabel(app.getCode88()));
JTextField versionActuelleField = new JTextField(30);
versionActuelleField.setName("versionActuelle"
+ app.getCode88());
versionActuelleField.setText(app
.getVersionCadreActuelle());
JTextField nouvellesNaturesField = new JTextField(
30);
nouvellesNaturesField.setName("nouvellesNatures"
+ app.getCode88());
myPanel.add(versionActuelleField);
myPanel.add(nouvellesNaturesField);
}
result = JOptionPane.showConfirmDialog(null, myPanel,
"Valeurs de cette version",
JOptionPane.OK_CANCEL_OPTION);
然后我不知道如何在用户单击“确定”按钮时获取值:
if (result == 0) { // The user clicks on the ok button
您使用 getText() 方法将 Jtextfield 值分配给一个字符串,例如下面
String texfield = JTextField.getText();
随后,您可以在任何需要的地方使用字符串文本字段。为了获得正确的 jtextfield,您必须从您想要的文本字段中获取文本,例如您有四个 Jtexfield。假设它们是 JTextField1、JTextField2、JTextField3 和 JTextField4。要获取 JTextField3 的值,您需要
String texfield = JTextField3.getText();
这些值应该在您创建的 JTextFields 中:
versionActuelleField
nouvellesNaturesField
此外,您可能想看看 ParamDialog,我将其实现为该问题的通用解决方案。
编辑
是的,我现在看到您正在循环创建这些 JTextFields
。因此,您需要创建一个 Collection
,我建议您创建一个 Map<String, JTextField>
,您可以在其中将所有应用程序名称映射到匹配的 JTextField
,并遍历集合以获取所有应用名称 / JTextFields
。
您需要将它们添加到您存储的某个列表中,以便您可以再次访问它们。由于您是在引用应用程序时添加它们,因此我建议使用 Map
private Map<Application, JTextField> nouvellesNaturesFields = new ArrayListMultimap<Application, JTextField>(); //Or Hashmap, if the key is unique
private Map<Application, JTextField> versionActuelleFields = new ArrayListMultiMap<Application, JTextField>();
public List<JTextField> getNouvellesNaturesFields() {
return nouvellesNaturesFields ;
}
public List<JTextField> getVersionActuelleFields () {
return versionActuelleFields ;
}
//class code
for (Application app : model.getCheckedApplications()) {
//Other code
JTextField nouvellesNaturesField = new JTextField(
30);
nouvellesNaturesField.setName("nouvellesNatures"
+ app.getCode88());
nouvellesNaturesFields.put(app, nouvellesNaturesField);
//Other code and same for your new nature fields
}
result = JOptionPane.showConfirmDialog(null, myPanel,
"Valeurs de cette version",
JOptionPane.OK_CANCEL_OPTION);
然后当用户单击确认按钮时,使用 属性 访问器 getNouvellesNaturesFields()
或 getVersionActuelleFields()
您可以迭代所有创建的字段,如下所示:
for (Map.Entry<Application, JTextField> entry: myMap.entries()) {
//Do something here
}
或者您也可以通过以下方式获取它们:
for (Application app : model.getCheckedApplications()) {
List<JTextField> data = myMap.get(app);
for(JTextField field : data) {
field.getText();
}
}
由于键值可能不是唯一的,我使用了一个 ArrayListMultiMap
, but if it would be unique, then a HashMap
就足够了