håndtering af objekter i arrayLists
Hej, jeg har nogle problemer med følgende kode, og jeg har stirret mig totalt blind på hvad det er jeg gør forkert, så jeg håber på lidt hjælp.problem 1: de reservedele jeg tilføjer til inholdet i reparations typen, bliver til den samme som reservedelen selv og denne får så sit antal sat til det jeg tilføjede til repType inholdet.
problem 2: den vil ikke køre min (found) metode, selvom det virker på mit output som om det er den samme der tilføjes.
problem 3: antallet af fjernede resDele tilføjes til den aktuelt valgte resDel i listen over alle, og ikke til den relevante resDel (jeg er klar over hvorfor, men kan ikke få en brugbar syntax stablet på benene.
Problem 4: har ikke kigget på det endnu, men den tømmer ikke min midlertidige opsætning, hvis jeg opretter eller nulstiller.
her er et link der viser brugerfladen
package gui;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import model.Operator;
import model.RepType;
import model.ResDel;
import service.Service;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
public class GuiRepTypOpret extends JPanel {
private static final long serialVersionUID = 1L;
private Service service = Service.getInstance();
private JList listRepTyper, listResDele, listRepTypIndh;
private JScrollPane scrlpRepTyper, scrlpResDele, scrlpRepTypInd;
private JLabel lblTitleRepTyper, lblId, lblNavn, lblBeskrivelse,
lblResDele, lblRepTypeInd, lblAntal, lblFeltMsg;
private JTextField txfId, txfNavn, txfBeskrivelse, txfAntal;
private JButton btnTilfoj, btnFjern, btnOpret, btnNulstil;
private Observer observer = new Observer();
private ArrayList<ResDel> tempRepTypeIndh = new ArrayList<ResDel>();
public GuiRepTypOpret() {
// ---------- Lists ----------
listRepTyper = new JList(service.getInstance().alleRepTyper().toArray());
this.add(listRepTyper);
listRepTyper.setLocation(25, 25);
listRepTyper.setSize(150, 150);
listRepTyper.addListSelectionListener(observer);
scrlpResDele = new JScrollPane(listRepTyper);
scrlpResDele.setLocation(25, 25);
scrlpResDele.setSize(150, 150);
this.add(scrlpResDele);
listResDele = new JList(service.getInstance().alleResDele().toArray());
this.add(listResDele);
listResDele.setLocation(25, 200);
listResDele.setSize(150, 175);
listResDele.addListSelectionListener(observer);
scrlpRepTyper = new JScrollPane(listResDele);
scrlpRepTyper.setLocation(25, 200);
scrlpRepTyper.setSize(150, 175);
this.add(scrlpRepTyper);
listRepTypIndh = new JList(tempRepTypeIndh.toArray());
this.add(listRepTypIndh);
listRepTypIndh.setLocation(325, 200);
listRepTypIndh.setSize(150, 200);
listRepTypIndh.addListSelectionListener(observer);
scrlpRepTypInd = new JScrollPane(listRepTypIndh);
scrlpRepTypInd.setLocation(325, 200);
scrlpRepTypInd.setSize(150, 200);
this.add(scrlpRepTypInd);
// ---------- Labels ----------
lblTitleRepTyper = new JLabel("Reparationstypeliste:");
this.add(lblTitleRepTyper);
lblTitleRepTyper.setLocation(25, 5);
lblTitleRepTyper.setSize(200, 25);
lblId = new JLabel("Reparationstype Id:");
this.add(lblId);
lblId.setLocation(205, 25);
lblId.setSize(150, 25);
lblNavn = new JLabel("Reparationstype Navn:");
this.add(lblNavn);
lblNavn.setLocation(205, 75);
lblNavn.setSize(150, 25);
lblBeskrivelse = new JLabel("Reparationstype Beskrivelse:");
this.add(lblBeskrivelse);
lblBeskrivelse.setLocation(205, 125);
lblBeskrivelse.setSize(175, 25);
lblResDele = new JLabel("Eksisterende Reservedele:");
this.add(lblResDele);
lblResDele.setLocation(25, 175);
lblResDele.setSize(175, 25);
lblRepTypeInd = new JLabel("Reservedele anvendt:");
this.add(lblRepTypeInd);
lblRepTypeInd.setLocation(325, 175);
lblRepTypeInd.setSize(200, 25);
lblAntal = new JLabel("Antal:");
this.add(lblAntal);
lblAntal.setLocation(205, 225);
lblAntal.setSize(300, 25);
lblFeltMsg = new JLabel("Output !");
this.add(lblFeltMsg);
lblFeltMsg.setLocation(25, 400);
lblFeltMsg.setSize(300, 25);
// ---------- TextFields ----------
txfId = new JTextField();
this.add(txfId);
txfId.setLocation(200, 50);
txfId.setSize(150, 25);
txfNavn = new JTextField();
this.add(txfNavn);
txfNavn.setLocation(200, 100);
txfNavn.setSize(150, 25);
txfBeskrivelse = new JTextField();
this.add(txfBeskrivelse);
txfBeskrivelse.setLocation(200, 150);
txfBeskrivelse.setSize(275, 25);
txfAntal = new JTextField();
this.add(txfAntal);
txfAntal.setLocation(250, 225);
txfAntal.setSize(45, 25);
// ---------- Buttons ----------
btnTilfoj = new JButton("Tilføj");
this.add(btnTilfoj);
btnTilfoj.setLocation(200, 200);
btnTilfoj.setSize(100, 25);
btnTilfoj.addActionListener(observer);
btnFjern = new JButton("Fjern");
this.add(btnFjern);
btnFjern.setLocation(200, 250);
btnFjern.setSize(100, 25);
btnFjern.addActionListener(observer);
btnNulstil = new JButton("Nulstil");
this.add(btnNulstil);
btnNulstil.setLocation(210, 300);
btnNulstil.setSize(80, 25);
btnNulstil.addActionListener(observer);
btnOpret = new JButton("Opret");
this.add(btnOpret);
btnOpret.setLocation(200, 375);
btnOpret.setSize(100, 25);
btnOpret.addActionListener(observer);
}
// sætter fælles data uafhængigt af kaldetype (søg/listevalg)
public void dataCleaner() {
txfId.setText("");
txfNavn.setText("");
txfBeskrivelse.setText("");
txfAntal.setText("");
listRepTypIndh.setListData(new ArrayList<Object>().toArray());
listRepTyper
.setListData(Service.getInstance().alleRepTyper().toArray());
}
private class Observer implements ActionListener, ListSelectionListener {
@Override
public void valueChanged(ListSelectionEvent e) {
try {
if (listRepTyper.getSelectedValue() != (null))
dataCleaner(); // kalder mit fælles data renser
} catch (NullPointerException npe) {
return;
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnTilfoj) {
try {
ResDel aktuelResDel = (ResDel) listResDele
.getSelectedValue();
ResDel tempAktuelResDel = (ResDel) listRepTypIndh
.getSelectedValue();
int tempAntal = Integer.parseInt(txfAntal.getText());
int tempSum = 0;
boolean found = false;
int i = 0;
while (!found && i < tempRepTypeIndh.size()) {
if (tempRepTypeIndh.get(i).getResDel().equals(
aktuelResDel))
found = true;
else
i++;
}
if (found) {
tempSum = tempRepTypeIndh.get(i).getResDelLagerAntal()
+ tempAntal;
tempRepTypeIndh.get(i).setLagerAntal(tempSum);
tempSum = aktuelResDel.getResDelLagerAntal()
- tempAntal;
aktuelResDel.setLagerAntal(tempSum);
listResDele.setListData(service.getInstance()
.alleResDele().toArray());
listRepTypIndh.setListData(tempRepTypeIndh.toArray());
lblFeltMsg.setText("found");
} else if (!found) {
tempSum = aktuelResDel.getResDelLagerAntal()
- tempAntal;
aktuelResDel.setLagerAntal(tempSum);
// resulrerer i en dobling af samme objekt
tempAktuelResDel = aktuelResDel;
// sætter også værdien i aktuelResDel
tempAktuelResDel.setLagerAntal(tempAntal);
tempRepTypeIndh.add(tempAktuelResDel);
// vedbliver at addere objektet til listen
listResDele.setListData(service.getInstance()
.alleResDele().toArray());
listRepTypIndh.setListData(tempRepTypeIndh.toArray());
lblFeltMsg.setText("! Temp=" + tempAktuelResDel
+ " Akt.=" + aktuelResDel);
}
} catch (NumberFormatException nfe) {
if (txfAntal.getText().isEmpty()) {
txfAntal.setText("Udfyld");
}
} catch (NullPointerException npfe) {
if (listResDele.getSelectedValue() == null
|| (listRepTypIndh.getSelectedValue()) == (null))
lblFeltMsg.setText("Vælg venligst en resDel");
}
} else if (e.getSource() == btnFjern) {
try {
ResDel aktuelResDel = (ResDel) listResDele
.getSelectedValue();
ResDel tempAktuelResDel = (ResDel) listRepTypIndh
.getSelectedValue();
int tempAntal = Integer.parseInt(txfAntal.getText());
int tempSum = 0;
boolean found = false;
int i = 0;
int nyAntal = 0;
while (!found && i < tempRepTypeIndh.size()) {
if (tempRepTypeIndh.get(i).getResDel().equals(
aktuelResDel))
// ikke imod aktuelResDel men på reel match
found = true;
else
i++;
}
if (found) {
tempAktuelResDel = (tempRepTypeIndh.get(i));
tempSum = (tempAktuelResDel.getResDelLagerAntal() - tempAntal);
if (tempAktuelResDel.getResDelLagerAntal() < 1) {
tempRepTypeIndh.remove(tempAktuelResDel);
}
listResDele.setListData(service.getInstance()
.alleResDele().toArray());
listRepTypIndh.setListData(tempRepTypeIndh.toArray());
lblFeltMsg.setText(tempAntal + " fjernet");
} else if (!found) {
tempSum = (tempAktuelResDel.getResDelLagerAntal() - tempAntal);
tempAktuelResDel.setLagerAntal(tempSum);
if (tempAktuelResDel.getResDelLagerAntal() < 1) {
tempRepTypeIndh.remove(tempAktuelResDel);
}
// ikke aktuelResDel men den reelle resDel match
tempSum = (aktuelResDel.getResDelLagerAntal() + tempAntal);
aktuelResDel.setLagerAntal(tempSum);
listRepTypIndh.setListData(tempRepTypeIndh.toArray());
listResDele.setListData(service.getInstance()
.alleResDele().toArray());
lblFeltMsg.setText(tempAntal + " fjernet");
}
} catch (NumberFormatException nfe) {
if (txfAntal.getText().isEmpty()) {
txfAntal.setText("Udfyld");
}
} catch (NullPointerException npfe) {
if (listResDele.getSelectedValue() == null
|| (listRepTypIndh.getSelectedValue()) == (null))
lblFeltMsg.setText("Vælg venligst en resDel");
}
} else if (e.getSource() == btnOpret) {
try {
// opretter repTypen og loop-indsætter delene.
String id = txfId.getText();
String navn = txfNavn.getText();
String beskrivelse = txfBeskrivelse.getText();
RepType repTypeTemp = new RepType(id, navn, beskrivelse);
for (int i = 0; i < tempRepTypeIndh.size(); i++) {
repTypeTemp.addResDel(tempRepTypeIndh.get(i));
}
service.opretRepType(repTypeTemp);
dataCleaner(); // kalder mit fælles data renser
lblFeltMsg.setText("Oprettet");
} catch (NumberFormatException nfe) {
if (txfId.getText().isEmpty())
txfId.setText("Vælg venligst");
}
} else if (e.getSource() == btnNulstil) {
dataCleaner(); // kalder mit fælles data renser
}
}
}
}