在对话框

时间:2016-09-15 12:56:26

标签: java swing jdialog

我需要在JDialog中显示一个标签(confirmDialog或inputDialog)。该选项卡每行包含2个JTextField。显示效果很好:

enter image description here

但我不知道如何获取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

3 个答案:

答案 0 :(得分:1)

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

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();
    }
}

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

data.table

由于键值可能不会是唯一的,我使用的是ArrayListMultiMap,但如果它是唯一的,则HashMap就足够了

答案 1 :(得分:0)

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

String texfield = JTextField.getText();

随后,您可以在任何位置使用String文本字段。要获得正确的jtextfield,您必须从所需的文本字段中获取文本,例如,您有四个Jtexfield。假设它们是JTextField1,JTextField2,JTextField3和JTextField4。要获得JTextField3的值,您需要

String texfield = JTextField3.getText();

答案 2 :(得分:0)

值应该在您创建的JTextField中:

versionActuelleField
nouvellesNaturesField

此外,您可能希望查看ParamDialog,我将其视为此问题的通用解决方案。

修改

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