Avatar billede blackoak Nybegynder
01. januar 2009 - 17:07 Der er 1 kommentar og
1 løsning

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
            }
        }
    }
}
Avatar billede blackoak Nybegynder
01. januar 2009 - 17:11 #1
beklager linket, det skulle have været: http://www.figurspil.dk/sar.jpg
Avatar billede blackoak Nybegynder
01. januar 2009 - 21:36 #2
erhm, jeg fandt ud af det. 2 kopper kaffe og et par friske øjne afslørede en gang rod :/
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester