2Danke
ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
499
499
EMPFEHLEN
-
Hallo!
Bei meinem letzten Projekt ist was schiefgelaufen. (Arraylist ändern)
Und zwar habe ich vergessen zu schreiben, dass nur das Element, das die Kontonummer, die ich in der ComboBox ausgewählt habe, geändert werden soll. Das hat dazu geführt, dass ich die gesamte Arraylist mit diesen einzigen Element überschrieben habe.
Dummerweise führte gestern ein PC-Absturz dazu, dass mir das Projekt verloren ging. Hab jetzt auf die Schnelle was Neues gemacht, allerdings sind da ein paar Fehler drin, wo ich nicht weiter weiß.
Hier mal der Code meiner Klassen:
Kontodaten:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
package test; public class Kontodaten { private int kontonr; private String vname; private String nname; private double betrag; public Kontodaten(int kontonr, String vname, String nname, double betrag) { } public String getVName() { return vname; } void setVName(String vname) { this.vname = vname; } public String getNName() { return nname; } void setNName(String nname) { this.nname = nname; } void setKontonummer(int kontonr) { this.kontonr = kontonr; } int getKontonummer() { return kontonr; } void setBetrag(double betrag) { this.betrag = betrag; } double getBetrag() { return betrag; } }
KontoGUI
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
package test; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Arrays; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.JComboBox; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JButton; import javax.swing.JTextField; public class KontoGUI extends JFrame implements ActionListener { String[][] inhalt; //Eigenschaften der Klasse JTable table; JPanel p; JPanel p1; JLabel kontonr = new JLabel("Kontonummer:"); JComboBox Kontonr = new JComboBox(); JLabel nname = new JLabel("Name:"); JLabel vname = new JLabel("Vorname:"); JLabel betrag = new JLabel("Betrag:"); JTextField tfNName = new JTextField(); JTextField tfVName = new JTextField(); JTextField tfBetrag = new JTextField(); JButton showButton = new JButton("Daten anzeigen"); JButton changeButton = new JButton("Ändern"); JButton clearButton = new JButton("Löschen"); JPanel p2; ArrayList<Kontodaten> liste = new ArrayList<Kontodaten>(); public void initPanel1(){ p1= new JPanel(); p1.setLayout(null); kontonr.setBounds(20,25,110,30); p1.add(kontonr); Kontonr.setBounds(150,25,110,30); p1.add(Kontonr); showButton.setBounds(20,70,240,20); p1.add(showButton); nname.setBounds(20,100,110,30); p1.add(nname); vname.setBounds(20,130,110,30); p1.add(vname); betrag.setBounds(20,160,110,30); p1.add(betrag); tfNName.setBounds(150,100,110,30); p1.add(tfNName); tfVName.setBounds(150,130,110,30); p1.add(tfVName); tfBetrag.setBounds(150,160,110,30); p1.add(tfBetrag); changeButton.setBounds(20,210,240,30); p1.add(changeButton); clearButton.setBounds(20,255,240,30); p1.add(clearButton); showButton.addActionListener(this); changeButton.addActionListener(this); clearButton.addActionListener(this); } public KontoGUI(){ erzeugeliste(liste); this.setTitle("Kontoverwaltung"); this.setSize(500,250); String[] kon = new String[liste.size()]; for (int i=0; i<liste.size(); i++) kon[i]=String.valueOf(liste.get(i).getKontonummer()); Arrays.sort(kon); Kontonr= new JComboBox(kon); initGUI(); } public void initPanel2(){ p2= new JPanel(); p2.setLayout(new BorderLayout()); String[] titel = {"Kontonr.","Vorname", "Name","Betrag"}; inhalt = new String[liste.size()][4]; table = new JTable(inhalt, titel); p2.add(new JScrollPane(table),BorderLayout.CENTER); tabellenausgabe(); } public void initGUI() { p = (JPanel)this.getContentPane(); initPanel1(); initPanel2(); p.setLayout(new GridLayout(1,2)); p.add(p1); p.add(p2); this.pack(); } private static void erzeugeliste(ArrayList<Kontodaten> liste) { liste.add(new Kontodaten(2350124, "Luise", "Auermann", 2000.00)); liste.add(new Kontodaten(4250125, "Hans", "Zaun", 1200.00)); liste.add(new Kontodaten(7440127, "Tom", "Bock", -400.00)); liste.add(new Kontodaten(1760126, "Mario", "Haus", 317.74)); liste.add(new Kontodaten(5140133, "Saskia", "Brauer", -74.68)); liste.add(new Kontodaten(8560142, "Julia", "Hess", 147.58)); liste.add(new Kontodaten(9930141, "Christin", "Berger", 0.00)); liste.add(new Kontodaten(3270132, "Andreas", "Wagner", 641.21)); liste.add(new Kontodaten(1180135, "Caroline", "Großmann", -474.15)); liste.add(new Kontodaten(4810155, "Axel", "Auermann", 1.23)); } public void actionPerformed(ActionEvent event) { Object source = event.getSource(); //Event:Anzeigen if(source == showButton){ for (int i = (liste.get(i).getKontonummer());;){ tfVName.setText(inhalt[i][1]); tfNName.setText(inhalt[i][2]); tfBetrag.setText(inhalt[i][3]); } } //Event:Clear if(source == clearButton){ tfVName.setText(""); tfNName.setText(""); tfBetrag.setText(""); } //Event:Ändern if(source == changeButton){ for (int i= 0; i<liste.size(); i++ ){ if(liste.get(i).getKontonummer().equals(Kontonr)) inhalt[i][1]= String.valueOf(tfVName); inhalt[i][2]= String.valueOf(tfVName); inhalt[i][3]= String.valueOf(tfBetrag); } } } private void tabellenausgabe() { for (int i=0;i<liste.size();i++){ inhalt[i][0]= String.valueOf(liste.get(i).getKontonummer()); inhalt[i][1]= liste.get(i).getVName(); inhalt[i][2]= liste.get(i).getNName(); inhalt[i][3]= String.valueOf(liste.get(i).getBetrag()); } table.repaint(); } }
Kontoverwaltung:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
package test; public class Kontoverwaltung { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub KontoGUI stud = new KontoGUI(); stud.setLocation(500,250); stud.setVisible(true); } }
Die Fehler sind folgende:
1. Beim "Ändern" gibt es einen Fehler: (rot unterstrichen)
"Cannot invoke equals(JComboBox) on the primitive type int"
2. Wenn ich das Programm starte, kommt zwar das Fenster, aber die Tabelle ist leer, bzw. stehen bei den Kontonummern "0" und bei den Beträgen "0.0".
Was ist da falsch, bzw. fehlt mir dort was?
Bitte wieder um schnelle Hilfe und wenn mgl. um den richtigen Code, da ich ab Freitag mit Prüfungen beschäftigt bin und das Projekt gern vorher fertig haben möchte.
mfG RaptoXX
-
01.02.12 20:38 #2
- Registriert seit
- Jun 2009
- Beiträge
- 870
ja, warum willst du auch einen Integer mit einer JComboBox vergleichen? (Zeile 139 in KontoGUI.java)1. Beim "Ändern" gibt es einen Fehler: (rot unterstrichen)
"Cannot invoke equals(JComboBox) on the primitive type int"
2. Der Fehler liegt in der Methode initPanel2:
Du erzeugst ein neues Array 'inhalt' mit der korrekten Größe, aber befüllst es nicht!Code java:
PS: Wenn du den Code korrekt einrückst, vereinfachst du uns das Lesen.
PS2: Du solltest unbedingt vermeiden, in Graphischen Oberflächen mit absoluten Bounds/Koordinaten zu arbeiten. Bei verschiedenen Themes oder LookAndFeels, Betriebssystemen, Schriftgrößen, etc. kann es sonst zu fehlerhafter Darstellung kommen.Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
Hi!
Ist mir jetzt auch aufgefallen, dass das beim ersten Fehler schlecht geht. Will ja eigentlich den Wert der ComboBox mit denen in der Tabelle vergleichen. Wie wäre dazu der Code?
Ich befülle die Tablle nicht? Das versteh ich grad nicht. Ich habe doch am Ende der initPanel2 die "tabellenausgabe()", die ich ab Zeile 149 in der KontoGUI geschrieben habe, verwendet.
mfG RaptoXXGeändert von RaptoXX (01.02.12 um 22:08 Uhr)
-
01.02.12 22:18 #4
- Registriert seit
- Jun 2009
- Beiträge
- 870
1. Du solltest die Trennung zwischen Model (=Daten) und View (=sichtbare Anzeige) berücksichtigen. Für beide (Tabelle wie JComboBox) kannst du ein Datenmodell angeben, dass unabhängig von der tatsächlichen (optischen/graphischen) Darstellung ist.
2. Wozu rufst du table.repaint() auf (in der Methode tabellenausgabe)? Für das neu Zeichnen der Tabelle gibt es Listener, die in den normalen TableModels bei Änderungen an den Daten dafür sorgen, dass die Tabelle neu gezeichnet wird.
Problem ist in deinem Fall, dass du die Daten (leeres Array) an den Constructor der Tabelle übergibst, dieser daraus ein TableModel generiert und du danach die Daten füllst. Du musst die Reihenfolge vertauschen!
Für die Tabellen gibt es ein HowTo: http://docs.oracle.com/javase/tutori...nts/table.htmlCode bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
Hallo!
Das erste geht klar. Ich hab dazu ne Lösung gefunden.
Nur bei dem zweiten komm ich echt nicht weiter. Ich hab das ganze so gemacht, wie es in der Hilfe drin war. Leider kommt es auf das selbe hinaus; überall sind Nullen.
Habe auch versucht, wie du es genannt hast die Reihenfolge zu verändern. -> selbes Ergebnis
Er findet auch defintiv die Arraylist und er weiß auch, dass sie aus 10 Elementen besteht, aber dennoch kommt nichts sinnvolles dabei raus.
Sorry, aber ich blick da langsam echt nicht mehr durch.
EDIT: Fehler gefunden! Mein Konstruktor für Kontodaten in der ersten Klasse war leer.
Damit konnte er die Werte nicht zuweisen und alles ist "Null" gewesen. Jetzt ist die Tabelle gefüllt. Muss jetzt noch die Buttons funktionstüchtig machen und dann wars das auch. Ich danke vielmals für die Hilfe.
mfG RaptoXXGeändert von RaptoXX (02.02.12 um 14:37 Uhr)
Ähnliche Themen
-
JComboBox
Von Olfipolfi im Forum Java GrundlagenAntworten: 4Letzter Beitrag: 14.05.10, 22:36 -
JComboBox
Von armakedon im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 30.09.09, 19:21 -
JComboBox
Von Endolino im Forum JavaAntworten: 5Letzter Beitrag: 14.06.07, 15:37 -
JcomboBox(2)
Von girl2005 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 28.07.05, 08:35 -
JComboBox
Von Serethos im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 8Letzter Beitrag: 05.11.04, 15:38





Zitieren
Login





