Avatar billede nbj1 Praktikant
26. februar 2003 - 19:55 Der er 22 kommentarer og
1 løsning

GUI/arrayList

hejsa og hjælp :)
sidder her og er tabt
jeg har en konti klasse med en metode findKonti()
der er en arrayList der indeholder kontonumre
og jeg har en GUI med txt2 felt og en but1 når jeg så indtaster et kontonr skal der tjekkes om den forefindes i min arrayList ellers må man ikke komme videre.
den nærmeste jeg kan finde er en boolean contains som skulle return true man af en eller anden grund kan jeg ikke få det til at spille.

    public void actionPerformed(ActionEvent e)
        {
              Object source = e.getSource();
           
            if (source == but1)
            {   
                if (check == 0)   
                { 
                    int kontonummer = Integer.parseInt(txt2.getText());
                    //Et,konti.findKonto(kontonummer);                           
                    //Et.konti.
               
                    kontrol();                   
                    konto.kontoNr();
                    check = 1;
                }
            }   
                           
        }               
    } // class ButtonListener
dette har jeg i GUI har prøvet lidt forskelligt så hvis der en der lige ved hvordan hører jeg det gerne :)
Avatar billede viht Nybegynder
26. februar 2003 - 20:01 #1
metoden contains på en ArrayList returnerer om objektet findes i listen. Den kan du roligt bruge.
if( list.contains(new Integer(kontonummer)) ) {
  // kontonummer eksisterer
}
Avatar billede viht Nybegynder
26. februar 2003 - 20:02 #2
Nu ved jeg så ikke hvordan du gemmer kontonumre.. ligger de i et objekt i listen? Hvis ja, så:
for( int i = 0; i < liste.size(); i++ ) {
  if( ((MyObject)liste.get(i)).getKontoNummer() == kontonummer ) {
      // kontonummer fundet
      break;
  }
}
Avatar billede viht Nybegynder
26. februar 2003 - 20:11 #3
// Konto.java:
public class Konto implements java.io.Serializable {
   
    private String kontonummer;
    private double saldo;

    public Konto(String kontonummer, double saldo) {
        this.kontonummer = kontonummer;
        this.saldo = saldo;
    }
   
    public void setKontonummer(String kontonummer) { this.kontonummer = kontonummer; }
    public void setSaldo(double saldo) { this.saldo = saldo; }
    public String getKontonummer() { return (this.kontonummer); }
    public double getSaldo() { return (this.saldo); }

    public String toString() {

        StringBuffer toString = new StringBuffer();
        toString.append("\nkontonummer = ");
        toString.append(kontonummer);
        toString.append("\nsaldo = ");
        toString.append(saldo);
        toString.append("\n");
       
        return new String(toString);
    }
}
// TestKonti.java:
import java.util.ArrayList;

public class TestKonti {
   
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add(new Konto("120323455", 234234.0));
        list.add(new Konto("124455432", 1212123.0));
        list.add(new Konto("123546677", 5675676.0));
        list.add(new Konto("346456455", 45633.0));
        for( int i = 0; i < list.size(); i++ ) {
            if( ((Konto)list.get(i)).getKontonummer().equals("346456455") ) {
                // konto fundet
                System.out.println ("Konto fundet på plads ["+i+"]");
            }
        }
    }   
}
Avatar billede nbj1 Praktikant
26. februar 2003 - 21:17 #4
hee rolig nu viht :)
    public Konti()
    {
        konti = new ArrayList();
        Konto konto;
        konti.add(new Konto(123, 2.5));
        konti.add(new Konto(124, 2.5));
        konti.add(new Konto(123, 2.5));
        konti.add(new Konto(145, 2.5));
       
           
    }// Konstruktør
    det er arrayet. som om du ikke kan se det :)

    public int findKonto(int nummer)
    {
        konti.indexOf("124");
       
        return nummer;
       

    }// findKonto

skal finde konto men det jeg har i GUI
    private class ButtonListener implements ActionListener
    {
   
        public void actionPerformed(ActionEvent e)
        {
              Object source = e.getSource();
           
            if (source == but1)
            {   
                if (check == 0)   
                { 
                    int kontonummer = Integer.parseInt(txt2.getText());
                    //Et,konti.findKonto(kontonummer);                           
                    //Et.konti.
               
                    kontrol();                   
                    konto.kontoNr();
                    check = 1;
                }
            }   
håber du kan se mønsteret
Avatar billede viht Nybegynder
26. februar 2003 - 22:47 #5
Jeg kan godt se hvad du prøver.. men det vil ikke virke fordi du leder efter et objekt i listen der er en String og er lig 124. Det er ikke hvad din ArrayList indeholder. Den indeholder objekter af typen Konto, ikke af typen String. Du kan ikke bruge indexOf, fordi du har ikke det objekt du leder efter! Du har kun en attribut på objektet, nemlig kontonummeret.

Forstår du hvad jeg mener?
Avatar billede nbj1 Praktikant
27. februar 2003 - 06:24 #6
okay men hvordan for jeg så det tilpasset så jeg kan sammenligne kontonumret jeg indtaster med det jeg har i arrryet viht?
Avatar billede viht Nybegynder
27. februar 2003 - 07:52 #7
Sådan her:

// Freehand:
ArrayList konti = new ArrayList();
konti.add(...);
konti.add(...);
konti.add(...);
JTextField field = new JTextField("1233232");
JButton getFieldData = new JButton("Get");
...
public void actionPerformed(ActionEvent event) {
  if( event.getSource() == getFieldData ) {
      if( getKontonr() > -1 )
        // nr fundet!
  }
  ...
}
private int getKontonummer() {
  String nr = field.getText();
  for( int i = 0; i < list.size(); i++ ) {
      if( ((Konto)konti.get(i)).getKontoNummer().equals(nr) )
        return i;
      }
  }
  return -1;
}
Avatar billede nbj1 Praktikant
27. februar 2003 - 08:11 #8
og det skal stå i denne her metode?
    private class ButtonListener implements ActionListener
    {
   
        public void actionPerformed(ActionEvent e)
        {
              Object source = e.getSource();
           
            if (source == but1)
            {   
                if (check == 0)   
                {     
                    int kontoNummer = Integer.parseInt(txt2.getText());
                   
                    for( int i = 0; i < kontoNummer.size(); i++ )
                    {

            //            if( (Konti.get(i)).getKontoNummer() == kontoNummer )
                        {
                          // kontonummer fundet
                        kontrol();
                        }
                    }
       
                           
                    check = 1;
                }
            }   
                           
        }               
    } // class ButtonListener
Avatar billede nbj1 Praktikant
27. februar 2003 - 08:16 #9
kan jeg ikke helt forstå da jeg har et array i konti classen
    public Konti()
    {
        konti = new ArrayList();
        Konto konto;
        konti.add(new Konto(123, 2.5));
        konti.add(new Konto(124, 2.5));
        konti.add(new Konto(123, 2.5));
        konti.add(new Konto(145, 2.5));
       
           
    }// Konstruktør
   
    public void addKonto(int kontoNr, double renteSats)
    {
        konti.add(new Konto(kontoNr, renteSats));
       
       
    }// addKonto
   
   
   
   
    public int findKonto(int kontoNummer)
    {
       
   
        if( konti.contains(new Integer(kontoNummer)) )
        {
          // kontonummer eksisterer
        }
       
        return kontoNummer;
       

    }// findKonto
   
   
}// Klasse
Avatar billede viht Nybegynder
27. februar 2003 - 08:46 #10
Du kan stadig ikke bruge contains, da den sammenligner Objekter i listen. Du skal løbe listen igennem og sammenligne dit kontonummer med ATTRIBUTTEN kontonummer på de objekter der er i listen. Det er derfor du skal bruge en for løkke.
Avatar billede nbj1 Praktikant
27. februar 2003 - 08:54 #11
skal jeg bruge den for løkke i metoden     public int findKonto(int kontoNr)
klassen konti eller i
i gui og hvis jeg laver den i findkonto hvordan fanger jeg den så i metoden
private class ButtonListener implements ActionListener ?????
Avatar billede nbj1 Praktikant
27. februar 2003 - 08:58 #12
public int findKonto(int kontoNr)
    {
       
   
            for( int i = 0; i < konti.size(); i++ )
            {
                  if( ((MyObject)konti.get(i)).getKontoNr() == kontoNr )
                {
                      // kontonummer fundet
                      break;
                  }
        }
                return kontoNr;
               

    }// findKonto
MyObject = hvad?
Avatar billede viht Nybegynder
27. februar 2003 - 08:59 #13
Du kan fint lave den i din gui klasse, så skal du bare bruge en reference til din Konti klasse.
Avatar billede nbj1 Praktikant
27. februar 2003 - 09:02 #14
nej den kommer med underlige fejl jeg ikke kan tyde når jeg laver det i gui klassen :(
Avatar billede nbj1 Praktikant
27. februar 2003 - 09:03 #15
referance tænker du så på Konti = new konti() for det har jeg prøvet det fatter den ikke eller skal der skrives konti. et eller andet?
Avatar billede viht Nybegynder
27. februar 2003 - 10:14 #16
Giv mig lige lidt tid, jeg laver et fuldstændigt eksempel i løbet af et par timer.
Avatar billede nbj1 Praktikant
27. februar 2003 - 14:31 #17
det glæder jeg mig meget til at se :)
Avatar billede viht Nybegynder
27. februar 2003 - 19:51 #18
// TestFrame.java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TestFrame extends JFrame {
   
    public TestFrame() {
       
        super("Test");
        setSize(300,100);
       
        Konti.getInstance().addKonto(new Konto("1111111", 2323.0));
        Konti.getInstance().addKonto(new Konto("2222222", 23434.0));
        Konti.getInstance().addKonto(new Konto("3333333", 56565.0));
        Konti.getInstance().addKonto(new Konto("4444444", 5554.0));
        Konti.getInstance().addKonto(new Konto("5555555", 2233.0));
        Konti.getInstance().addKonto(new Konto("6666666", 6769.0));
       
        final JTextField kontonummerTextField = new JTextField(new FixedSizeDocument(7), "", 10);
        // kun syv cifre må indtastes
        JButton searchButton = new JButton("Søg");
        searchButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                int result = Konti.getInstance().findKontoNummer(kontonummerTextField.getText());
                if( result > -1  )
                    JOptionPane.showMessageDialog(getFocusOwner(), "Konto fundet på plads nr: " +result);
            }
        });
        JLabel kontonummerLabel = new JLabel("Indtast kontonummer");
        JPanel textFieldPanel = new JPanel();
        textFieldPanel.add(kontonummerLabel);
        textFieldPanel.add(kontonummerTextField);
           
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(searchButton);
       
        getContentPane().add(textFieldPanel, BorderLayout.CENTER);
        getContentPane().add(buttonPanel, BorderLayout.SOUTH);
    }
}
class TestIt {
    public static void main(String[] args) {
        new TestFrame().show();
    }
}
// Konti.java:
import java.util.ArrayList;

public class Konti {
   
    private static Konti instance = null;
   
    private ArrayList konti;
   
    protected Konti() {
       
        konti = new ArrayList();
    }
   
    public static Konti getInstance() {
        if( instance == null )
            instance= new Konti();
        return instance;
    }
   
    public void addKonto(Konto konto) {
        konti.add(konto);
    }
   
    public ArrayList getKonti() {
        return konti;
    }
   
    public int findKontoNummer(String kontonummer) {
        for( int i = 0; i < konti.size(); i++ ) {
            if( ((Konto)konti.get(i)).getKontonummer().equals(kontonummer) )
                return i;
        }
        return -1;
    }
}
// Konto.java:
public class Konto implements java.io.Serializable {
   
    private String kontonummer;
    private double saldo;

    public Konto(String kontonummer, double saldo) {
        this.kontonummer = kontonummer;
        this.saldo = saldo;
    }
   
    public void setKontonummer(String kontonummer) { this.kontonummer = kontonummer; }
    public void setSaldo(double saldo) { this.saldo = saldo; }
    public String getKontonummer() { return (this.kontonummer); }
    public double getSaldo() { return (this.saldo); }

    public String toString() {

        StringBuffer toString = new StringBuffer();
        toString.append("\nkontonummer = ");
        toString.append(kontonummer);
        toString.append("\nsaldo = ");
        toString.append(saldo);
        toString.append("\n");
       
        return new String(toString);
    }
}
// FixedSizeDocument.java:
import javax.swing.text.PlainDocument;
import javax.swing.text.BadLocationException;
import javax.swing.text.AttributeSet;

public class FixedSizeDocument extends PlainDocument {

    private int limit;

    public FixedSizeDocument(int limit) {
        this.limit = limit;
    }

    public void insertString (int offs, String str, AttributeSet a) throws BadLocationException {
        if (getLength() + str.length() <= limit)
            super.insertString(offs, str, a);
    }
}
Avatar billede nbj1 Praktikant
27. februar 2003 - 21:09 #19
ævs der er lidt fejl i konti klassen og i testframe
Avatar billede viht Nybegynder
27. februar 2003 - 21:17 #20
Er der? De kompilerer og kører da fint?
Avatar billede nbj1 Praktikant
28. februar 2003 - 06:44 #21
yes takker have fået pladseret en fil i forkert bib. tak for hjælpen.
Avatar billede nbj1 Praktikant
28. februar 2003 - 07:16 #22
her lige et spørgsmål mere :) hvis du vil
i testframe har du
if( result > -1  )
                JOptionPane.showMessageDialog(getFocusOwner(), "Konto fundet på plads nr: " +result);
kan man få den til at åbne en anden klasse med jframe i stedet eks public class DinKonto extends JFrame ? det er fordi der har jeg hæv og indsæt på konto
Avatar billede nbj1 Praktikant
28. februar 2003 - 07:20 #23
hvis det er muligt vil jeg meget gerne have dig på min icq 141221874 ville være en stor hjælp.
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