我正在创建一个可以管理商店库存的应用程序。我希望能够更改某些商品的当前库存。首先,您使用复选框从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)));
}
答案 0 :(得分:0)
我得到的问题是下面的行
bestellenBrandstof.add(aantallen.get(brandstofType.indexOf(a)));
如果aantallen.get(brandstofType.indexOf(a))
返回相同的JTextField
,那么它不会再次添加到JPanel
中,因此不会显示某些JTextField
。
请检查brandstofType
和onderdeelNrs
数组的值。