JTextField无法正确显示

时间:2014-03-17 20:10:08

标签: java swing jtextfield joptionpane

我正在创建一个可以管理商店库存的应用程序。我希望能够更改某些商品的当前库存。首先,您使用复选框从JTable选择要更改的项目,然后点击JButton会触发ActionEvent,然后会出现JOptionPane,您可以在其中输入新股票数字。

问题在于,根据您选择的内容,它不会显示关于文章的正确信息,有时它甚至不会显示我用于输入的JTextField

这是我的代码:

    if (eventSource == bestelBrandstof) {
        ArrayList<Integer> brandstofTID = new ArrayList<Integer>();
        ArrayList<String> brandstofType = new ArrayList<String>();
        ArrayList<JTextField> aantallen = new ArrayList<JTextField>();

        for (int i = 0; i < modelBrandstof.getRowCount(); i++) {
            if ((boolean) modelBrandstof.getValueAt(i, 0)) {
                brandstofType.add((String) modelBrandstof.getValueAt(i, 1));
                brandstofTID.add(Integer.parseInt((String) modelBrandstof.getValueAt(i, 2)));
                aantallen.add(new JTextField("", 5));
            }
        }

        if (brandstofType.size() > 0) {

            bestellenBrandstof = new JPanel();
            bestellenBrandstof.setLayout(new FlowLayout());
            bestellenBrandstof.add(new JLabel("Hoeveel liter wilt u van de volgende brandstof(fen) bestellen?"));

            for (String a : brandstofType) {
                bestellenBrandstof.add(new JLabel(a + " " + brandstofTID.get(brandstofType.indexOf(a))));
                bestellenBrandstof.add(aantallen.get(brandstofType.indexOf(a)));
            }

            int n = JOptionPane.showConfirmDialog(null, bestellenBrandstof);

            if (n == JOptionPane.YES_OPTION) {
                boolean empty = false;

                for (JTextField a : aantallen) {
                    if (a.getText().equals(""))
                        empty = true;
                }

                if (empty == false) {
                    try {
                        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
                        String datumVandaag = dateFormat.format(new Date());
                        FileWriter fw = new FileWriter("./bestellingen/Bestellen_Brandstof_" + datumVandaag + ".txt");
                        PrintWriter pw = new PrintWriter(fw);
                        for (Integer a : brandstofTID) {
                            pw.print("Nr: " + a.toString() + ", Type: " + brandstofType.get(brandstofTID.indexOf(a)) + ", Tankstation Identificatie: " + aantallen.get(brandstofTID.indexOf(a)).getText());
                            pw.print(System.lineSeparator());
                        }
                        pw.close();
                    } catch (IOException exc) {
                        exc.printStackTrace();
                    }
                    JOptionPane.showMessageDialog(null, "De Bestellijst in aangemaakt");
                } else {
                    JOptionPane.showMessageDialog(null, "Aantal Liters niet volledig ingevuld");
                }
            }
        } else {
            JOptionPane.showMessageDialog(null, "Selecteer onder het kopje 'Bestellen?' welke onderdelen u wilt bestellen");
        }
    }

编辑: 这是我写的一些类似的代码,它正常工作

    if (eventSource == bestelOnderdelen) {
        ArrayList<Integer> onderdeelNrs = new ArrayList<Integer>();
        ArrayList<String> onderdeelOmschrijving = new ArrayList<String>();
        ArrayList<JTextField> aantallen = new ArrayList<JTextField>();
        for (int i = 0; i < modelOnderdelen.getRowCount(); i++) {
            if ((boolean) modelOnderdelen.getValueAt(i, 0)) {
                onderdeelNrs.add(Integer.parseInt((String) modelOnderdelen.getValueAt(i, 1)));
                onderdeelOmschrijving.add((String) modelOnderdelen.getValueAt(i, 2));
                aantallen.add(new JTextField("", 5));
            }
        }

        if (onderdeelNrs.size() > 0) {

            bestellenOnderdelen = new JPanel();
            bestellenOnderdelen.setLayout(new FlowLayout());
            bestellenOnderdelen.add(new JLabel("Hoeveel wilt u van de volgende artikelen bestellen?"));

            for (Integer a : onderdeelNrs) {
                bestellenOnderdelen.add(new JLabel(Integer.toString(a) + " " + onderdeelOmschrijving.get(onderdeelNrs.indexOf(a))));
                bestellenOnderdelen.add(aantallen.get(onderdeelNrs.indexOf(a)));
            }

            int n = JOptionPane.showConfirmDialog(null, bestellenOnderdelen);

            if (n == JOptionPane.YES_OPTION) {
                boolean empty = false;

                for (JTextField a : aantallen) {
                    if (a.getText().equals(""))
                        empty = true;
                }

                if (empty == false) {
                    try {
                        SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
                        String datumVandaag = dateFormat.format(new Date());
                        FileWriter fw = new FileWriter("./bestellingen/Bestellen_Onderdelen_" + datumVandaag + ".txt");
                        PrintWriter pw = new PrintWriter(fw);
                        for (Integer a : onderdeelNrs) {
                            pw.print("Nr: " + a.toString() + ", Omschrijving: " + onderdeelOmschrijving.get(onderdeelNrs.indexOf(a)) + ", Aantal: " + aantallen.get(onderdeelNrs.indexOf(a)).getText());
                            pw.print(System.lineSeparator());
                        }
                        pw.close();
                    } catch (IOException exc) {
                        exc.printStackTrace();
                    }
                    JOptionPane.showMessageDialog(null, "De Bestellijst in aangemaakt");
                } else {
                    JOptionPane.showMessageDialog(null, "Aantallen niet volledig ingevuld");
                }
            }
        } else {
            JOptionPane.showMessageDialog(null, "Selecteer onder het kopje 'Bestellen?' welke onderdelen u wilt bestellen");
        }
    }

编辑: 我添加了ArrayList<Integer> uniqueID = new ArrayList<Integer>();并编辑了这部分

            for (Integer a : uniqueID) {
                bestellenBrandstof.add(new JLabel(brandstofType.get(uniqueID.indexOf(a)) + " " + brandstofTID.get(uniqueID.indexOf(a))));
                bestellenBrandstof.add(aantallen.get(uniqueID.indexOf(a)));
            }

1 个答案:

答案 0 :(得分:0)

我得到的问题是下面的行

bestellenBrandstof.add(aantallen.get(brandstofType.indexOf(a)));

如果aantallen.get(brandstofType.indexOf(a))返回相同的JTextField,那么它不会再次添加到JPanel中,因此不会显示某些JTextField

请检查brandstofTypeonderdeelNrs数组的值。