Java 在对话框中单击“确定”时获取Jtextfields的值

Java 在对话框中单击“确定”时获取Jtextfields的值,java,swing,jdialog,Java,Swing,Jdialog,我需要在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); myPa

我需要在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);
然后,当用户单击OK按钮时,我不知道如何获取值:

if (result == 0) { // The user clicks on the ok button

您可以使用getText()方法将Jtextfield值分配给字符串,例如

String texfield = JTextField.getText();
随后,您可以在任何需要的地方使用字符串文本字段。为了得到正确的jtextfield,您必须从您想要的textfield中获取文本,例如,您有四个Jtexfield。假设它们是JTextField1、JTextField2、JTextField3和JTextField4。要获得JTextField3的值,您必须

String texfield = JTextField3.getText();

这些值应位于您创建的JTextFields中:

VersionActuellelField
新自然场

另外,您可能想看看,我实现了一个通用的解决方案来解决这个问题

编辑
是的,我现在看到您正在循环中创建这些
JTextFields
。因此,您需要创建一个
集合
,我建议创建一个
映射
,您可以将所有应用程序名称映射到匹配的
JTextField
,并在集合上迭代以获得所有应用程序名称/
JTextFields

您需要将它们添加到存储的某个列表中,以便再次获取它们。由于您是在引用应用程序时添加它们,因此我建议

或者,您也可以通过以下方式获取:

for (Application app : model.getCheckedApplications()) {
    List<JTextField> data = myMap.get(app);
    for(JTextField field : data) {
        field.getText();
    }
}
(应用程序应用程序:model.getCheckedApplications())的
{
列表数据=myMap.get(应用程序);
for(JTextField字段:数据){
field.getText();
}
}

由于键值可能不是唯一的,所以我使用了,但如果它是唯一的,那么a就足够了。

JTextField.getText()
???@MatthewDiana是的,但如何才能获得正确的JTextField?1)要更快地获得更好的帮助,请发布或。2) 最好在显示选项窗格时传递父组件。这样,在关闭选项窗格之前,用户无法与(父)GUI交互。OP无法访问这些字段,因为它们是在for循环中创建的,问题是,它们没有在任何地方存储对这些字段的引用,并且在退出hashmap解决方案的循环时丢失,应用程序代码在key中,值为2 JTextField的数组在我的上下文中工作得非常好。谢谢
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();
    }
}