To String Metode überschreiben?

BMWbest

Mitglied
Hallo Community
Ich hab ein Problem, dass für euch sicher sehr schnell lösbar ist, aber ich steck da gerade ziemlich fest
Damit ihr genau wisst worum es geht, erklär ich es mal kurz.

Ich habe eine Datenbank, die Kunden, Bodyguards und die damit zusammenhängenden Auftrage verwaltet. (Kunden können Bodyguards buchen usw)
Es handelt sich dabei um die in Netbeans integrierte Derbydatenbank.

Bisher kann ich Kunden und Bodyguards in vollem Umfang verwalten.

Ich bin gerade am Entwickeln der GUI für die Auftragsverwaltung.
Die sieht bis jetzt so aus:
urfdn5tm.jpg


Ihr seht nun die 3 Comboboxen.
Bei "Einsatzarten" stehen 3 Werte drinnen. (Wie hier der erste Wert "Personenschutz").
Er definiert die Art des Einsatzes.
Die Bodyguards in der Datenbank haben ebenfalls diese Werte, dir ihr Spezialgebiet beschreiben.
Di

Nun das Problem.
-Ich möchte nun erreichen, dass wenn ich bei der ersten Combobox beispielsweiße "Personenschutz" auswähle, in der Combobox darunter NUR die Bodyguards (mit Vor und Nachname) angezeigt werden, die ebenfalls "Personenschutz" als ihr Spezialgebiet haben.(männlich/weiblich war nur zum Test)
-In der Personencombobox sollen alle Kunden in der DB angezeigt werden.
(Da es ein kleiner Kundenkreis sein wird, wird das kein Problem sein)

Damit ihr euch besser eindenken könnt, hier ein wenig Code und die Struktur:
Java:
package Personen;

import java.util.Date;
public class Kunde extends Personen {

    
    private int kNr; 

    public Kunde(int kNr, String vorname,String nachname, String geschlecht, Date geburtstag, int handynummer, String mail) {
        super(vorname, nachname, geschlecht, geburtstag, handynummer, mail);
        this.kNr = kNr;
    }
    
    public Kunde(String vorname,String nachname, String geschlecht, Date geburtstag, int handynummer, String mail) {
        super(vorname, nachname, geschlecht, geburtstag, handynummer, mail);
    }

    public int getkNr() {
        return kNr;
    }

    public void setkNr(int kNr) {
        this.kNr = kNr;
    }
}

Java:
package Personen;

import java.util.Date;

/**
 *
 * @author Marc
 */
public class Bodyguard extends Personen {

    private String einsatzgebiet;
    private int jahreBerufserfahrung;
    private double stundenlohn;
    private int bNr;

    /**
     *
     * @param bNr               Bodyguard ID
     * @param einsatzgebiet     Personenschützer, Türsteher, Real-Estate Security
     * @param verbucht          Bereits im Dienst? 
     * @param jahreBerufserfahrung  Wie lange ist der BG schon "dabei"?
     * @param stundenlohn
     * @param vorname
     * @param geschlecht
     * @param geburtstag
     * @param handynummer
     * @param mail
     */
    public Bodyguard(int bNr, String vorname,String nachname, String einsatzgebiet, int jahreBerufserfahrung, double stundenlohn, String geschlecht, Date geburtstag, int handynummer, String mail) {
        super(vorname, nachname, geschlecht, geburtstag, handynummer, mail);
        this.einsatzgebiet = einsatzgebiet;
        this.jahreBerufserfahrung = jahreBerufserfahrung;
        this.stundenlohn = stundenlohn;
        this.bNr = bNr;
    }
    
        public Bodyguard(String vorname,String nachname, String einsatzgebiet, int jahreBerufserfahrung, double stundenlohn, String geschlecht, Date geburtstag, int handynummer, String mail) {
        super(vorname, nachname, geschlecht, geburtstag, handynummer, mail);
        this.einsatzgebiet = einsatzgebiet;
        this.jahreBerufserfahrung = jahreBerufserfahrung;
        this.stundenlohn = stundenlohn;
    }

    public int getbNr() {
        return bNr;
    }

    public void setbNr(int bNr) {
        this.bNr = bNr;
    }

    public String getEinsatzgebiet() {
        return einsatzgebiet;
    }

    public void setEinsatzgebiet(String einsatzgebiet) {
        this.einsatzgebiet = einsatzgebiet;
    }


    public int getJahreBerufserfahrung() {
        return jahreBerufserfahrung;
    }

    public void setJahreBerufserfahrung(int jahreBerufserfahrung) {
        this.jahreBerufserfahrung = jahreBerufserfahrung;
    }

    public double getStundenlohn() {
        return stundenlohn;
    }

    public void setStundenlohn(double stundenlohn) {
        this.stundenlohn = stundenlohn;
    }
}

Java:
package Datenbank;

import Personen.Auftrag;
import Personen.Bodyguard;
import Personen.Kunde;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Date;
import java.util.*;
import java.sql.ResultSet;

import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author schsim10
 */
public class Datenhaltung {

    private static Datenhaltung manager;
    ArrayList<Kunde> kunden;
    ArrayList<Bodyguard> bodyguards;
    private String dbTreiber = "org.apache.derby.jdbc.EmbeddedDriver";
    private String dbURL = "jdbc:derby:" + System.getProperty("user.dir") + "\\BodyguardEskortService";
    private PreparedStatement dbBefehl;
    private Connection dbVerbindung;

    public static Datenhaltung getManager() {
        if (manager == null) { //der manager existiert noch nicht
            manager = new Datenhaltung();
        }
        return manager;
    }

    private Datenhaltung() {
    }

    public void initDB() {
        try {
            Class.forName(dbTreiber);
            dbVerbindung = DriverManager.getConnection(dbURL, "bodyguard", "bodyguard");
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }

    
    
    public void neuerKundeAnlegen(Kunde kunde) {
        try {
            dbBefehl = dbVerbindung.prepareStatement("INSERT INTO APP.KUNDE (VORNAME, NACHNAME, MAIL, GEBURTSTAG, GESCHLECHT, HANDYNUMMER) VALUES (?,?,?,?,?,?)");
            dbBefehl.setString(1, kunde.getVorname());
            dbBefehl.setString(2, kunde.getNachname());
            dbBefehl.setString(3, kunde.getMail());
            dbBefehl.setDate(4, new Date(kunde.getGeburtstag().getTime()));
            dbBefehl.setString(5, kunde.getGeschlecht());
            dbBefehl.setInt(6, kunde.getHandynummer());
            dbBefehl.executeUpdate();
//            ResultSet ergebnis = dbBefehl.getGeneratedKeys();
//            kunde.setkNr(ergebnis.getInt(1));
//            ergebnis.close();
            dbBefehl.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void bearbeiteKunde(Kunde kunde) {
        try {
            dbBefehl = dbVerbindung.prepareStatement("UPDATE APP.KUNDE SET VORNAME = ?, NACHNAME = ?, MAIL = ?, GEBURTSTAG = ?, GESCHLECHT = ?, HANDYNUMMER = ? WHERE KUNDENNUMMER = ?");
            dbBefehl.setString(1, kunde.getVorname());
            dbBefehl.setString(2, kunde.getNachname());
            dbBefehl.setString(3, kunde.getMail());
            dbBefehl.setDate(4, new Date(kunde.getGeburtstag().getTime()));
            dbBefehl.setString(5, kunde.getGeschlecht());
            dbBefehl.setInt(6, kunde.getHandynummer());
            dbBefehl.setInt(7, kunde.getkNr());
            dbBefehl.executeUpdate();
            dbBefehl.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    public void loescheKunde(Kunde kunde) {
        try {
            dbBefehl = dbVerbindung.prepareStatement("DELETE FROM APP.KUNDE WHERE KUNDENNUMMER = ?");
            dbBefehl.setInt(1, kunde.getkNr());
            dbBefehl.execute();
            dbBefehl.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public ArrayList<Kunde> leseAlleKunde() {
        ArrayList<Kunde> kundenListe = new ArrayList<>();
        try {
            dbBefehl = dbVerbindung.prepareStatement("SELECT * FROM APP.KUNDE");
            ResultSet ergebnis = dbBefehl.executeQuery();
            while (ergebnis.next()) {
                int kundennummer = ergebnis.getInt(1);
                String vorname = ergebnis.getString(2);
                String nachname = ergebnis.getString(3);
                String geschlecht = ergebnis.getString(6);
                java.util.Date geburtsdatum = ergebnis.getDate(5);
                int handynummer = ergebnis.getInt(7);
                String eMail = ergebnis.getString(4);
                kundenListe.add(new Kunde(kundennummer, vorname, nachname,geschlecht, geburtsdatum,handynummer, eMail));
            }
            dbBefehl.close();
            ergebnis.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return kundenListe;
    }
    
    /////////
    
    public void neuerBodyguardAnlegen(Bodyguard bodyguard) {
        try {
            dbBefehl = dbVerbindung.prepareStatement("INSERT INTO APP.BODYGUARD (VORNAME, NACHNAME, GESCHLECHT, HANDYNUMMER, GEBURTSTAG, EINSATZGEBIET, BERUFSERFAHRUNG, STUNDENLOHN, MAIL) VALUES (?,?,?,?,?,?,?,?,?)");
            dbBefehl.setString(1, bodyguard.getVorname());
            dbBefehl.setString(2, bodyguard.getNachname());
            dbBefehl.setString(9, bodyguard.getMail());
            dbBefehl.setDate(5, new Date(bodyguard.getGeburtstag().getTime()));
            dbBefehl.setString(3, bodyguard.getGeschlecht());
            dbBefehl.setInt(4, bodyguard.getHandynummer());
            dbBefehl.setString(6, bodyguard.getEinsatzgebiet());
            dbBefehl.setInt(7, bodyguard.getJahreBerufserfahrung());
            dbBefehl.setDouble(8, bodyguard.getStundenlohn());
            dbBefehl.executeUpdate();
//            ResultSet ergebnis = dbBefehl.getGeneratedKeys();
//            kunde.setkNr(ergebnis.getInt(1));
//            ergebnis.close();
            dbBefehl.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public void bearbeiteBodyguard(Bodyguard bodyguard) {
        try {
            dbBefehl = dbVerbindung.prepareStatement("UPDATE APP.BODYGUARD SET VORNAME = ?, NACHNAME = ?, MAIL = ?, GEBURTSTAG = ?, GESCHLECHT = ?, HANDYNUMMER = ?, BERUFSERFAHRUNG = ?, EINSATZGEBIET =?, STUNDENLOHN = ? WHERE KUNDENNUMMER = ?");
            dbBefehl.setString(1, bodyguard.getVorname());
            dbBefehl.setString(2, bodyguard.getNachname());
            dbBefehl.setString(3, bodyguard.getMail());
            dbBefehl.setDate(4, new Date(bodyguard.getGeburtstag().getTime()));
            dbBefehl.setString(5, bodyguard.getGeschlecht());
            dbBefehl.setInt(6, bodyguard.getHandynummer());
            dbBefehl.setInt(7, bodyguard.getJahreBerufserfahrung());
            dbBefehl.setString(8, bodyguard.getEinsatzgebiet());
            dbBefehl.setDouble(9, bodyguard.getStundenlohn());
            dbBefehl.setInt(10, bodyguard.getbNr());
            dbBefehl.executeUpdate();
            dbBefehl.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    public void loescheBodyguard(Bodyguard bodyguard) {
        try {
            dbBefehl = dbVerbindung.prepareStatement("DELETE FROM APP.KUNDE WHERE KUNDENNUMMER = ?");
            dbBefehl.setInt(1, bodyguard.getbNr());
            dbBefehl.execute();
            dbBefehl.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public ArrayList<Bodyguard> leseAlleBodyguards() {
        ArrayList<Bodyguard> BodyguardListe = new ArrayList<>();
        try {
            dbBefehl = dbVerbindung.prepareStatement("SELECT * FROM APP.KUNDE");
            ResultSet ergebnis = dbBefehl.executeQuery();
            while (ergebnis.next()) {
                int bodyguardnummer = ergebnis.getInt(1);
                String vorname = ergebnis.getString(2);
                String nachname = ergebnis.getString(3);
                String geschlecht = ergebnis.getString(4);
                int handynummer = ergebnis.getInt(5);
                java.util.Date geburtsdatum = ergebnis.getDate(6);
                String einsatzgebiet = ergebnis.getString(7);
                int berufserfahrung = ergebnis.getInt(8);
                Double stundenlohn = ergebnis.getDouble(9);
                String eMail = ergebnis.getString(10);
                BodyguardListe.add(new Bodyguard (bodyguardnummer, vorname, nachname, einsatzgebiet,berufserfahrung,stundenlohn,geschlecht,geburtsdatum,handynummer, eMail));
            }
            dbBefehl.close();
            ergebnis.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return BodyguardListe;
    }
    
    ///////
    
     public void neuerAuftragAnlegen(Auftrag auftrag) {
        try {
            dbBefehl = dbVerbindung.prepareStatement("INSERT INTO APP.AUFTRAEGE (BG_GEBUCHT_AM, GEBUCHT_BIS, BG_NUMMER, K_NUMMER, EINSATZART, EINSATZEINNAHMEN, RISIKOZUSCHLAG, EINSATZKOSTEN) VALUES (?,?,?,?,?,?,?,?)");
            dbBefehl.setDate(1, new Date(auftrag.getVon().getTime()));
            dbBefehl.setDate(2, new Date(auftrag.getBis().getTime()));
            dbBefehl.setInt(3, auftrag.getBodyguard().getbNr());
            dbBefehl.setInt(4, auftrag.getKunde().getkNr());
            dbBefehl.setString(5, auftrag.getEinsatzArt());
            dbBefehl.setDouble(6, auftrag.getEinsatzEinnahmen());
            dbBefehl.setDouble(7, auftrag.getRisikozuschlag());
            dbBefehl.setDouble(8, auftrag.getEinsatzkosten());
            dbBefehl.executeUpdate();
//            ResultSet ergebnis = dbBefehl.getGeneratedKeys();
//            kunde.setkNr(ergebnis.getInt(1));
//            ergebnis.close();
            dbBefehl.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    public ArrayList<Auftrag> leseAlleAuftraege() {
        ArrayList<Auftrag> auftragListe = new ArrayList<>();
        String sqlQuery = "SELECT * FROM APP.AUFTRAEGE INNER JOIN APP.KUNDE ON APP.AUFTRAEGE.K_NUMMER = APP.KUNDE.KUNDENNUMMER INNER JOIN APP.BODYGUARD ON APP.AUFTRAEGE.BG_NUMMER = APP.BODYGUARD.BODYGUARD_ID ;"; 
        try {
            dbBefehl = dbVerbindung.prepareStatement(sqlQuery);
            ResultSet ergebnis = dbBefehl.executeQuery();
            while (ergebnis.next()) {
                ////////////////
                int kundennummer = ergebnis.getInt("KUNDENNUMMER");
                String kvorname = ergebnis.getString("VORNAME");
                String knachname = ergebnis.getString("NACHNAME");
                String kgeschlecht = ergebnis.getString("GESCHLECHT");
                java.util.Date kgeburtsdatum = ergebnis.getDate("GEBURTSDATUM");
                int khandynummer = ergebnis.getInt("HANDYNUMMER");
                String kMail = ergebnis.getString("MAIL");
                Kunde kunde = new Kunde(kundennummer, kvorname, knachname, kgeschlecht, kgeburtsdatum, khandynummer, kMail);
                
                ///////////////
                
                int bodyguardnummer = ergebnis.getInt("BODYGUARD_ID");
                String bvorname = ergebnis.getString("VORNAME");
                String bnachname = ergebnis.getString("NACHNAME");
                String einsatzgebiet = ergebnis.getString("EINSATZGEBIET");
                int berufserfahrung = ergebnis.getInt("BERUFSERFAHRUNG");
                double stundenlohn = ergebnis.getDouble("STUNDENLOHN");
                String bgeschlecht = ergebnis.getString("GESCHLECHT");
                java.util.Date bgeburtsdatum = ergebnis.getDate("GEBURTSDATUM");
                int bhandynummer = ergebnis.getInt("HANDYNUMMER");
                String bMail = ergebnis.getString("MAIL");
                Bodyguard bodyguard = new Bodyguard(bodyguardnummer, bvorname, bnachname,einsatzgebiet,berufserfahrung,stundenlohn, bgeschlecht, bgeburtsdatum, bhandynummer, bMail);
                
                ////////////////
                
                int auftragsnummer = ergebnis.getInt("AUFTRAGSNUMMER");
                Date von = ergebnis.getDate("BG_GEBUCHT_AM");
                Date bis = ergebnis.getDate("GEBUCHT_BIS");
                String einsatzart = ergebnis.getString("EINSATZART");
                Double einsatzeinnahmen = ergebnis.getDouble("EINSATZEINNAHMEN");
                double risikozuschlag = ergebnis.getDouble("RISIKOZUSCHLAG");
                double kosten = ergebnis.getDouble("EINSATZKOSTEN");
                Auftrag auftrag = new Auftrag(kunde, bodyguard,von, bis,einsatzart, einsatzeinnahmen,risikozuschlag,kosten);
                 auftragListe.add(auftrag);
            }
            dbBefehl.close();
            ergebnis.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return auftragListe;
    }
    
    
    
}

So, jetzt müsste eben noch die Gui-Klasse Zur Auftragserstellung geschrieben werden.
Die grafische Oberfläche steht (in der Alpha version :) ) (siehe oben).
Das Problem ist jetzt eben nur, das mit den Komboboxen..
Ich dachte mir. ich könnte die toString Methode der Bodyguard-Klasse überschreiben, sodass ich die komplette Liste an Bodyguards dann in die Gui-Klasse holen kann, und dann nach Spezialgebiet "filtern" kann. Aber wie ?

Hier zur einfacheren Vorstellung noch die Bodyguardtabelle der DB
6zgojcf2.jpg


Wisst ihr weiter?
Das wäre spitze!
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Ich kann es nicht oft genug sagen. toString() ist für Debugging-Zwecke und Logausgaben. Sie ist nicht für die Ausgabe auf GUIs gedacht!!!! Das ist ein eklatanter Missbrauch dieser Methode und wird Dir bei der nächsten Änderung auf die Füße fallen.

Die Darstellung komplexer Objekte in GUI-Elementen wird in Swing wird über sog. Renderer gemacht. Wenn du Swing benutzt, programmiere Dir also einen Renderer.

Und beim Filtern kommen Dir die getter zu Hilfe:
Java:
String selectedEinsatzgebiet = ... irgendwo aus der GUI gesetzt...

List<Bodyguard> dieGeladenenBodyguards = ... irgendwie geladen ...
Iterator<Bodyguard> iter = dieGeladenenBodyguards.iterator();

while(iter.hasNext()) {

 Bodyguard current = iter.next();

 if(!selectedEinsatzgebiet.equals(current.getEinsatzgebiet()) {
   iter.remove();
 }
}
Die Filterlogik kann man auch als Interface mit entsprechenden Implementierungen auslagern. Das macht das ganze flexibler. Schaue dir für Anregungen an, wie FileFilter und FileNameFilter funktionieren.
 
Zuletzt bearbeitet von einem Moderator:

BMWbest

Mitglied
hey spitze, vielen Dank für die schnelle, aufschlussreiche Antwort !!
Deine Methode ist ziemlich gut.

Die Frage ist dann noch: Wie übergeb ich der Combobox die "iterierte" Arraylist ?
Ich hab das mal gegoogelt und stoße immer wieder auf den Hinweis, dass man ein Combobox model erstellen muss.
Aber das kann ja fast nicht sein, dass ich dafür ein extra model schreiben muss oder?

Im Teil 2 wirds ja noch spannender
Ich hab ja jeweils noch ein "bearbeiten" Menü, dass so ausschaut:
fse44b5u.jpg


Es wird, wie üblich, der Datensatz der Angeklickten Spalte ins Bearbeiten-Menü geladen:
Der Quelltext dazu:
Java:
package GUI;

import Datenbank.Datenhaltung;
import EigeneTableModel.KundeTableModel;
import Personen.Kunde;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
 *
 * @author baemar06
 */
public class KundeBearbeiten extends javax.swing.JDialog {

    private Datenhaltung handler;
    private KundeTableModel model;
    private JTable table;
    private boolean potentielleEingabe = false;

    /**
     * Creates new form KundeAnlegen
     */
    public KundeBearbeiten(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        setLocationRelativeTo(null);
        handler = Datenhaltung.getManager();
        model = new KundeTableModel(handler.leseAlleKunde());
        table = new JTable(model);
        table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (!e.getValueIsAdjusting()) {
//                    System.out.println(table.getSelectedRow());
                    neueAuswahl(model.getKunde(table.getSelectedRow()));
                }
            }
        });
        jScrollPaneKundenAnzeige.setViewportView(table);
    }

    private void neueAuswahl(Kunde kunde) {
        if (kunde == null) {
            return;
        }
        this.jTextFieldVorname.setText(kunde.getVorname());
        this.jTextFieldNachname.setText(kunde.getNachname());
        this.jTextFieldHandy.setText(String.valueOf(kunde.getHandynummer()));
        this.jTextFieldEmail.setText(kunde.getMail());
        if (kunde.getGeschlecht().equals("Weiblich")) {
            this.jComboBoxGeschlecht.setSelectedIndex(1);
        } else {
            this.jComboBoxGeschlecht.setSelectedIndex(0);
        }
        this.jXDatePickerGeburtstag.setDate(kunde.getGeburtstag());
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jTextFieldVorname = new javax.swing.JTextField();
        jTextFieldNachname = new javax.swing.JTextField();
        jComboBoxGeschlecht = new javax.swing.JComboBox();
        jTextFieldEmail = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        jTextFieldHandy = new javax.swing.JTextField();
        jXDatePickerGeburtstag = new org.jdesktop.swingx.JXDatePicker();
        jButtonAbrechen = new javax.swing.JButton();
        jScrollPaneKundenAnzeige = new javax.swing.JScrollPane();
        jButtonAenderungenUebernehmen = new javax.swing.JButton();
        jButtonLoeschen = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                potentielleEingabe(evt);
            }
        });
        addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                nurBuchstaben(evt);
            }
        });

        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jLabel1.setText("Vorname:");

        jLabel2.setText("Nachname:");

        jLabel3.setText("Geschlecht:");

        jLabel4.setText("Geburtsdatum:");

        jLabel5.setText("Email:");

        jTextFieldVorname.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                potentielleEingabe(evt);
            }
        });
        jTextFieldVorname.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                nurBuchstaben(evt);
            }
        });

        jTextFieldNachname.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                potentielleEingabe(evt);
            }
        });
        jTextFieldNachname.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                nurBuchstaben(evt);
            }
        });

        jComboBoxGeschlecht.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Männlich", "Weiblich" }));
        jComboBoxGeschlecht.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                potentielleEingabe(evt);
            }
        });

        jTextFieldEmail.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                potentielleEingabe(evt);
            }
        });
        jTextFieldEmail.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                nurBuchstaben(evt);
            }
        });

        jLabel6.setText("Handy:");

        jTextFieldHandy.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                potentielleEingabe(evt);
            }
        });
        jTextFieldHandy.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                nurZahlen(evt);
            }
        });

        jXDatePickerGeburtstag.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                potentielleEingabe(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel4)
                    .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.TRAILING))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jTextFieldNachname, javax.swing.GroupLayout.DEFAULT_SIZE, 140, Short.MAX_VALUE)
                    .addComponent(jTextFieldVorname, javax.swing.GroupLayout.DEFAULT_SIZE, 140, Short.MAX_VALUE)
                    .addComponent(jXDatePickerGeburtstag, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel5)
                    .addComponent(jLabel6)
                    .addComponent(jLabel3))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                        .addComponent(jTextFieldEmail)
                        .addComponent(jTextFieldHandy, javax.swing.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE))
                    .addComponent(jComboBoxGeschlecht, javax.swing.GroupLayout.PREFERRED_SIZE, 84, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jTextFieldVorname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel5)
                    .addComponent(jTextFieldEmail, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(jTextFieldNachname, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel6)
                    .addComponent(jTextFieldHandy, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jComboBoxGeschlecht, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel4)
                    .addComponent(jLabel3)
                    .addComponent(jXDatePickerGeburtstag, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jButtonAbrechen.setText("Abrechen");
        jButtonAbrechen.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                abbrechen(evt);
            }
        });

        jButtonAenderungenUebernehmen.setText("Änderungen übernehmen");
        jButtonAenderungenUebernehmen.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                updateKunde(evt);
            }
        });

        jButtonLoeschen.setText("Löschen");
        jButtonLoeschen.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                loescheKunde(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jButtonLoeschen)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButtonAenderungenUebernehmen)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButtonAbrechen))
                    .addComponent(jScrollPaneKundenAnzeige))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPaneKundenAnzeige, javax.swing.GroupLayout.DEFAULT_SIZE, 132, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonAbrechen)
                    .addComponent(jButtonAenderungenUebernehmen)
                    .addComponent(jButtonLoeschen))
                .addGap(10, 10, 10))
        );

        pack();
    }// </editor-fold>                        

    private void updateKunde(java.awt.event.ActionEvent evt) {                             
        int selectedRow = table.getSelectedRow();
        Kunde kunde = model.getKunde(table.getSelectedRow());
        kunde.setVorname(this.jTextFieldVorname.getText());
        kunde.setNachname(this.jTextFieldNachname.getText());
        kunde.setMail(this.jTextFieldEmail.getText());
        kunde.setGeschlecht(this.jComboBoxGeschlecht.getSelectedItem().toString());
        handler.bearbeiteKunde(kunde);
        model.fireTableRowsUpdated(selectedRow, selectedRow);
    }                            

    private void loescheKunde(java.awt.event.ActionEvent evt) {                              
        int selectedRow = table.getSelectedRow();
        int nextRow = selectedRow + 1;
        table.changeSelection(nextRow, 0, false, false);
        model.removeRow(selectedRow);
        handler.loescheKunde(model.getKunde(table.getSelectedRow()));
    }                             

    private void nurBuchstaben(java.awt.event.KeyEvent evt) {                               
        char taste = evt.getKeyChar();
        boolean tasteOK = true;
        if (taste <= '0' || taste <= '9') {
            tasteOK = false;
        }
        if (taste == '.') {
            tasteOK = true;
        }
        if (!tasteOK) {
            evt.consume();
        }
    }                              

    private void potentielleEingabe(java.awt.event.MouseEvent evt) {                                    
        potentielleEingabe =true;
    }                                   

    private void abbrechen(java.awt.event.ActionEvent evt) {                           
                   if(potentielleEingabe){ //soll unbeabsichtigtes Schließen und Datenverlust vermeiden
        int abbrechen = JOptionPane.showOptionDialog(null, "Möchten Sie wirklich schließen? ", "Achtung!", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);
        if (abbrechen == 0) {
            dispose();
        }}else{
            dispose();
        }
    }                          

    private void nurZahlen(java.awt.event.KeyEvent evt) {                           
         boolean tasteOK = false;
         char taste = evt.getKeyChar();
               if (!(taste < '0' || taste > '9')) {
                tasteOK = true;               
                }            
            if (!tasteOK) { //Ist die Tasteneingabe genehmigt?
            System.out.println("verbieten");
            evt.consume(); //verbieten, wenn nicht
        }
    }                          

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see [url=http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html]How to Set the Look and Feel (The Java™ Tutorials > Creating a GUI With JFC/Swing > Modifying the Look and Feel)[/url] 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(KundeBearbeiten.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(KundeBearbeiten.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(KundeBearbeiten.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(KundeBearbeiten.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the dialog */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                KundeBearbeiten dialog = new KundeBearbeiten(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    @Override
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

Sprich, da muss er dann im Menü "auftrag bearbeiten" die Einsatzart aus der Tabelle ablesen, die Combox so einstellen, und die zweite daurauf ausrichten.
Aber ok... Wenn ich das mal hinbekomme, dass Schritt eins funktioniert, dann bekomm ich das denke ich auch voll hin:)

Wichtig wäre jetzt nur, wie ich die von dir vorgeschlagene Methode übernehmen kann.
Heißt, wie ich diese ArrayList, auf die combobox anwende..
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Das ist ganz leicht. Du musst das ComboboxModel mittels des entspr. Setters von JComboBox setzen. Und zu implementieren brauchst Du es nicht. Es existiert bereits eines namens DefaultComboBoxModel. Dem kannst Du die Werte als Konstruktorparameter übergeben (allerdings als Array, aber aus einer Liste ein Array machen ist ja nicht so schwer).
Hier der Link zur API-Doc von JCombobox: JComboBox (Java Platform SE 7 )
Und hier das DefaultComboboxModel DefaultComboBoxModel (Java Platform SE 7 )
 

BMWbest

Mitglied
Von dem DefaultComboBoxModel hab ich gelesen, allerdings soll das ja beim Filtern schon nicht mehr funktionieren.
sei mir nicht böse, aber ich steig da jetzt echt nicht durch.
Was du schreibst macht Sinn, aber ich weiß nicht, wie ich das jetzt auf mein Beispiel anwenden könnte.
Kannst du vielleicht ein Beispiel machen, bzw. falls möglich, an meinem Code zeigen ? :)
Das ist irgendwie echt tricky. Das mit den TableModels hab ich jetzt raus, aber das ist ja ja wieder was ganz anderes :D
 
N

nillehammer

Gast
Eigentlich ist TableModel sogar schwieriger, weil es da Spalten gibt. Schau Dir doch mal die Links zur API-Doku an, die ich gepostet habe. Da siehst Du, was DefaultComboBoxModel alles "kann" (fast nichts, deswegen ist es ja so leicht).

Wenn Du dann immer noch Beispiele brauchst, ist google Dein Freund, ich nicht :pueh:.

Wenn's so überhaupt nicht "Klick" machen will, lege ich Dir sehr das Swing-Tutorial von Oracle ans Herz: Trail: Creating a GUI With JFC/Swing (The Java™ Tutorials)
Obwohl das vielleicht dann doch etwas zuuuu basic ist. Immerhin hast du die GUIs ja schon recht gut hinbekommen. (Hast Du doch, oder?)
 

BMWbest

Mitglied
ja, die hab ich jetzt auch schon zu genüge gemacht :D
Der Comboboxfall ist ziemliches Neuland jetzt...
Wenn ich bisher damit gearbeitet hab, mussten die nicht dynamisch sein und ich konnte die Items schon vorgeben. Hab mich nur mal ansatzweiße jetzt in die Models eingelesen, aber die Möglichkeiten jetzt noch nicht ganz raus :D

Aber okay... du mir den Einsteig schonmal etwas geebnet jetzt.. ich werds mir nochmal genau anschauen, danke dir!!
Vielleicht schreibt ja noch jemand anderes ein paar Tipps, damit ich das etwas schneller hinbekomme ;)
 

BMWbest

Mitglied
okay, ich hab mich jetzt einmal dran gemacht:

Java:
public ArrayList<Bodyguard> leseAlleBodyguards() {
        ArrayList<Bodyguard> BodyguardListe = new ArrayList<>();
        try {
            dbBefehl = dbVerbindung.prepareStatement("SELECT * FROM APP.KUNDE");
            ResultSet ergebnis = dbBefehl.executeQuery();
            while (ergebnis.next()) {
                int bodyguardnummer = ergebnis.getInt(1);
                String vorname = ergebnis.getString(2);
                String nachname = ergebnis.getString(3);
                String geschlecht = ergebnis.getString(4);
                int handynummer = ergebnis.getInt(5);
               java.util.Date geburtsdatum = ergebnis.getDate(6);
                String einsatzgebiet = ergebnis.getString(7);
                int berufserfahrung = ergebnis.getInt(8);
                Double stundenlohn = ergebnis.getDouble(9);
                String eMail = ergebnis.getString(10);
                BodyguardListe.add(new Bodyguard (bodyguardnummer, vorname, nachname, einsatzgebiet,berufserfahrung,stundenlohn,geschlecht,geburtsdatum,handynummer, eMail));
            }
            dbBefehl.close();
            ergebnis.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return BodyguardListe;
    }

Java:
public class BodyGuardComboBoxModel extends AbstractListModel implements ComboBoxModel {

    private ArrayList<Bodyguard> bodyguardListe;
    private Bodyguard auswahl;
    Datenhaltung manager;

    public BodyGuardComboBoxModel() {
        manager = Datenhaltung.getManager();
        bodyguardListe = (ArrayList<Bodyguard>) manager.leseAlleBodyguards();

        auswahl = bodyguardListe.get(0);
    }

    @Override
    public int getSize() {
        return bodyguardListe.size();
    }

    @Override
    public Object getElementAt(int index) {
        return bodyguardListe.get(index);
    }

    @Override
    public void setSelectedItem(Object anItem) {
        auswahl = (Bodyguard) anItem;
    }

    @Override
    public Object getSelectedItem() {
        return auswahl;
    }
}

Und jetzt wollte ich einfach mal die Combobox testweise mit der Liste aller BG füllen:
(in der Auftragerstellen Klasse)
Java:
jComboBoxBodyguards.setModel(new BodyGuardComboBoxModel())

Was jetzt kommt ist die Fehlermeldung:
Es wurde versucht, einen Datenwert des Typs 'int' aus einem Datenwert des Typs 'DATE' abzurufen.

Als Zeile spuckt mir der Compiler aus der Methode leseAlleBodyguards (siehe erster Spoiler) die Zeile mit der Handynummer aus.

Was stimmt da nicht?
 

Olli_M

Mitglied
Hm, sieht irgendwie so aus, als ob dort, wo du einen int erwartest (Handynummer), in der DB der Date-Wert steht. Vielleicht ist die Spalten-Reihenfolge in der DB nicht passend zu der Reihenfolge mit dem Auslesen in leseAlleBodyguards().
 

BMWbest

Mitglied
doch, die Reihenfolge passt, und die Handynummer hat in der DB auch einen INT

siehe Tabelle oben.. Spalte 5 ist die Handynummer ???:L

Ich habe in der Klasse für die Bodyguards 2 Konstruktoren. Einen mit und einen ohne die ID, da diese von der Datenbank erstellt wird

Könnte das da Probleme geben?

Stimmt meine DefaultComboBox Klasse so?
 
Zuletzt bearbeitet:

BMWbest

Mitglied
okay, Fehler behoben, die GUI öffnet sich...
Jetzt muss aber an der DefaultComboBox falsch sein...

Denn die zeigt mir jetzt folgendes an:
doftegcv.jpg


Könnt ihr mal ein Blick in die Klsase werfen (siehe früheren Post im Spoiler)
Was müsste ich da ändern?
 

BMWbest

Mitglied
ja, den Fehler bringt er jetzt nicht mehr.. jetzt zeigt er nur in der "Bodyguard" Combobox (siehe screenshot) so ein mist an..
Beheben kann ich das imo nur, wenn ich die toStringMethode überschreib, was ja keine so tolle Art ist..
wie gehts denn noch?
 

BMWbest

Mitglied
exakt !
Aber dafür muss er ja erst mal das Objekt als solches herziehen und dann einzelne Werte rauspicken.. Beim bloßen überschreiben der ToString Methode schägt das schonmal schief.. da kann ich dann vllt den Nachnamen auswählen..
Aber eigentlich möchte ich den kompletten Namen und die ID in der Combobox anzeigen lassen.

Später muss ich außerdem noch implementieren, dass bereits gebuchte BG nichtmehr in der List erscheinen. Das wird dann nicht schwer. Aber ich hab grad echt das Problem, dass ich es nicht hinbekomme, Die BG in der combobox anzuzeigen, wenn ich nicht die toString Mehtode überschreib..
Wie muss ich denn die oben gepostete ComboBox Klasse ergänzen, damit das funktioniert?
 

Templarthelast

Bekanntes Mitglied
Warum willst du die toString-Methode unbedingt nicht überschreiben? Mir scheint es hier die einfachste Möglichkeit zu sein, solange du deine BodyGuardComboBox mit einem BG Objekt machen willst.
 

bERt0r

Top Contributor
Du machst dir das ganze doch viel zu schwer. Du brauchst keine eigene ComboBoxModel Klasse. Vom schema her funktioniert das so:
Java:
DefaultComboBoxModel<Bodyguard> model=new DefaultComboBoxModel<Bodyguard>();
List<Bodyguard> alleBodyguards=wasAuchImmer;
String gesuchteEinsatzart;
for(Bodyguard b:alleBodyguards)
{
if(b.getEinsatzart().equals(gesuchteEinsatzart)
{
model.addElement(b);
}
}
comboboxBodyguards.setModel(model);
 

BMWbest

Mitglied
hey bERt0r
Dankeschön für deine Hilfe!
Deine Variante schaut auch recht plausibel aus...

Aber hat einen kleinen Hacken..
Du fügst jedes mal die entsprechenden Bodyguards zum model hinzu.
Switche ich jetzt mit der "einsatzart" Combobox hin und her, bekomme ich die liste immer neu hinzugefügt, habe also alle Namen doppelt und dreifach drinne. Wähle ich dann eine andere Einsatzart, werden die Namen auch wieder hinzugefügt. Die Combobox wird also nicht "aktualisiert", sonder es kommen immer wieder die selben Namen dazu..

Hast du da auch eine Lösung ?
Sollte ich vielleicht in die Datenhaltungsklasse eine Methode schreiben, die die Daten direkt aus der DB holt?
 

BMWbest

Mitglied
Theoretisch ja,
aber ich habs nochmal ausprobiert..

Java:
public class GuiAuftragAnlegen extends javax.swing.JDialog {
    private ArrayList<Bodyguard> alleBodyguards;

Dann im Konstruktor:
Java:
        model = new DefaultComboBoxModel<>();

Und die Methode:

Java:
    private void jComboBoxEinsatzartItemStateChanged(java.awt.event.ItemEvent evt) {                                                     
        alleBodyguards = handler.leseAlleBodyguards();
        this.gewuenschteEinsatzArt = this.jComboBoxEinsatzart.getSelectedItem().toString();
        for (Bodyguard b : alleBodyguards) {
            if (b.getEinsatzgebiet().equals(gewuenschteEinsatzArt)) {
                model.addElement(b);
            }
        }
        jComboBoxBodyguard.setModel(model);
    }

Und ich hab nach paar maligem Hin- und Her Switchen alle Einträge n-fach in der Combobox..
Was ist falsch?
 

bERt0r

Top Contributor
Jedes mal, wenn du eine neue Einsatzart auswählst musst du ein neues ComboBoxModell erstellen. Ein ComboBoxModell per se ist nicht viel mehr als eine Liste.
 

BMWbest

Mitglied
So es hat nun Funktioniert, dass ich die Objekte in die Comboboxen laden kann, und die sich bei Änderung der Datenbank aktualisieren...

Möchte ich nun eine Änderung an einem Auftrag vornehmen, klicke ich in der Tabelle auf eine Zeile und er lädt mir die Daten in die entsprechenden Textfelder zum bearbeiten. Klickt der Benutzer auf Speichern, werden die aktuellen Datensätze in der Datenbank mit den neuen Werten überschrieben
Der Code in der Gui Klasse sieht damit so aus:
a6of8arp.jpg


Nun sehr ihr die zwei roten Bereiche.
Natürlich erwartet er an den beiden Stellen jetzt ein Kunden- bzw. ein Bodyguard object.
Jetzt stellt sich mir die Frage, wie ich das aus der Combobox wieder herausholen kann ?!
Ich könnte theoretisch das Item als String herausholen, und mit einer Iteration nach der Person suchen.
Da es sich aber um einen Nachnamen handelt, kann der in der DB mehrmals vorkommen.

Daher meine Frage: Kann ich aus dem Comboboxmodel den Bodyguard wieder auslesen ?
Erstellt wurde die Combobox jetzt so:
Java:
        alleBodyguards = handler.leseAlleBodyguards();
        this.gewuenschteEinsatzArt = this.jComboBoxEinsatzart2.getSelectedItem().toString();
        bgModel = new DefaultComboBoxModel<>();
        for (Bodyguard b : alleBodyguards) {
            if (b.getEinsatzgebiet().equals(gewuenschteEinsatzArt)) {                
                bgModel.addElement(b);
            }
        }
        this.jComboBoxBodyguard2.setModel(bgModel);
 

BMWbest

Mitglied
Ziel ist es also, ein eigenes Objekt wieder aus der Combobox zu holen... ist das möglich und wenn ja, wie?

Theoretisch müsste ich
Java:
bgModel = new DefaultComboBoxModel<>();

In den Constructor einbauen, anstatt in die Methode.
dann kann ich in der ganzen Klasse auf das Model zugreifen und über
bgModel.getElementAt das Bodyguard Objekt aus der combobox ziehen.

Problem ist nur, wenn ich diese Zeile aus dem Itemlistener hole, dann wird nicht bei jeder Auswahl der Einsatzart die Bodyguardliste verändert, sonder es kommen immer mehr Bodyguards (die Selben) zur Liste hinzu...
Das ist ein echtes Problem :D

Ich dachte, ich erstell jetzt für die jeweilige Combobox einmal einen neuen Listener mit folgendem Inhalt:
Java:
bgModel = new DefaultComboBoxModel<>();
        int index= this.jComboBoxBodyguard2.getSelectedIndex();
        gewaehlterBg = bgModel.getElementAt(index);

Dann übergeb ich an den handler oben den gewaehlterBg ... Ob das funktioniert?

Wisst ihr weiter?
Danke für eure Hilfe
 
Zuletzt bearbeitet:

BMWbest

Mitglied
Okay, auch das wäre geschafft...
Noch eine Frage zur Ausgabe eines Objects in einer ComboBox

Meine Methode ist ja jetzt
Java:
        alleBodyguards = handler.leseAlleBodyguards();
        this.gewuenschteEinsatzArt = this.jComboBoxEinsatzart2.getSelectedItem().toString();
        bgModel = new DefaultComboBoxModel<>();
        for (Bodyguard b : alleBodyguards) {
            if (b.getEinsatzgebiet().equals(gewuenschteEinsatzArt)) {                
                bgModel.addElement(b);
            }
        }
        this.jComboBoxBodyguard2.setModel(bgModel);

Das Element das jetzt hinzugefügt wird, ist der Nachname der Person, den ich in der Personenklasse in der toString() Methode als Rückgabewert habe...
Was aber, wenn ich jetzt die Kundennummer UND den Nachname in der Combobox anzeigen lassen möchte?
Ich kann ja in der toString() keine zwei rückgabewerte haben
 
N

nillehammer

Gast
Das Element das jetzt hinzugefügt wird, ist der Nachname der Person, den ich in der Personenklasse in der toString() Methode als Rückgabewert habe...
Was aber, wenn ich jetzt die Kundennummer UND den Nachname in der Combobox anzeigen lassen möchte?
Ich kann ja in der toString() keine zwei rückgabewerte haben
Siehst Du? Ich habe doch geschrieben, dass toString überschreiben ne blöde Idee ist. Nun merkst Du auch warum. Es gibt für fast jedes GUI-Element bei Swing einen Renderer. DEN musst Du implementieren und nichts anderes. Ich glaube, das habe ich auch schon geschrieben...

[EDIT]Ja genau, genau in diesem Thread vor 7 Tagen: http://www.java-forum.org/java-basi...tring-metode-ueberschreiben-2.html#post981747, hättste mal gleich auf mich gehört und 7 Tage Deiner Lebenszeit gespart :D[/EDIT]

[EDIT]Un hier steht, wie man einer Combobox einen Renderer setzt: JComboBox.html#setRenderer(javax.swing.ListCellRenderer)[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:

bERt0r

Top Contributor
Genauer wird das übrigens hier beschrieben: How to Use Combo Boxes (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)

Du verstehst offenbar nicht wie man mit Comboboxen umgeht. Frei geschriebenes Bsp:

Java:
public class Bodyguard
{
String vorname, nachname;
public Bodyguard(String vname, String nname)
{
vorname=vname;
nachname=nname;
}

public String getVorname()
{
return vorname;
}

public String getNachname()
{
return nachname;
}
}

public static void main(String[] args)
{
List<Bodyguard> bodyguards=new ArrayList<Bodyguard>();
for(int i=0;i<100;i++)
{
bodyguards.add(new Bodyguard(String.valueOf(i),"Smith");
}

JFrame frame =new JFrame();
JComboBox<Bodyguard> combo=new JComboBox<Bodyguard>();
DefaultComboBoxModel<Bodyguard> cbModel=new DefaultComboBoxModel<Bodyguard>();
for(Bodyguard b:bodyguards)
{
      int x=Integer.parseInt(b.getVorname);   //hier deine  Einsatzart abfrage
      if(x%3==0)
      {
            cbModel.add(b);
      }
}
combo.setModel(cbModel);
frame.add(combo);
frame.pack();
frame.setVisible(true);
}
}
 

BMWbest

Mitglied
@nillehammer
:D ja, aber später wurde es mir wieder empfohlen ... aber nur so lernt man haha

@bert0r
Danke... werd ich nach den Klausuren mal ausprobieren...
Dann geb ich nochmal Bescheid!
Danke euch für eure Hilfe!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb String mit Datumsangabe in Long umwandeln Java Basics - Anfänger-Themen 2
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
Kartoffel_1 String transformation Java Basics - Anfänger-Themen 7
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
K String analysieren Java Basics - Anfänger-Themen 27
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
I Sass Compiler und String erhalten? Java Basics - Anfänger-Themen 7
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
N String überprüfen Java Basics - Anfänger-Themen 3
E String zerlegen aus args Java Basics - Anfänger-Themen 1
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
J String Filter Java Basics - Anfänger-Themen 5
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Größter zusammenhängender Block gleicher Zeichen im String Java Basics - Anfänger-Themen 1
XWing Randomizer mit einem String Java Basics - Anfänger-Themen 2
D 2D Char Array into String Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
I Zerlegen von String Java Basics - Anfänger-Themen 3
B Beliebiger String gegeben Suche Datum in String Java Basics - Anfänger-Themen 6
I String Java Basics - Anfänger-Themen 4
I API - zurückgegebener JSON String lesen und in Entity konvertieren Java Basics - Anfänger-Themen 2
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
M RandomAccessFile int und String gleichzeitig in einer Datei Java Basics - Anfänger-Themen 49
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
Distanz zwischen zwei Zeichenfolgen in einem String bestimmen Java Basics - Anfänger-Themen 5
Substring in einem String finden Java Basics - Anfänger-Themen 13
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
I Eindeutiger String mit maximaler Anzahl an Zeichen Java Basics - Anfänger-Themen 11
H Interface Wieso "List<String> list = new ArrayList<>[…]" Java Basics - Anfänger-Themen 4
JavaBeginner22 Integer in String umwandeln Java Basics - Anfänger-Themen 7
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
HolyFUT Input/Output Leerzeichen aus String entfernen - klappt nicht! Java Basics - Anfänger-Themen 13
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
Alen123 String wiederholen mit Schleifen Java Basics - Anfänger-Themen 1
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
T String splitten Java Basics - Anfänger-Themen 3
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
T Platzhalter in String? Java Basics - Anfänger-Themen 14
M String mit Variable vergleichen Java Basics - Anfänger-Themen 9
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
P9cman Vokale in einem String überprüfen mittels Rekursion Java Basics - Anfänger-Themen 8
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
R Ein Multidimensionales String Array initialisieren und Deklarieren Java Basics - Anfänger-Themen 2
H String Repräsentation eines Rechtecks mit Instanz-Methode Java Basics - Anfänger-Themen 8
Dorfschmied Kartesisches Produkt von zwei Liste mit Hashmaps<String,String> erstellen Java Basics - Anfänger-Themen 4
S String mit Int input vergleichen Java Basics - Anfänger-Themen 5
C String/Char-API Java Basics - Anfänger-Themen 13
U Char zu einem String machen Java Basics - Anfänger-Themen 1
B Anzahl Nullen uns Einsen in String ermitteln Java Basics - Anfänger-Themen 3
T Leerzeichen im String entfernen Java Basics - Anfänger-Themen 6
Jose05 Nullpointerexception bei Umwandlung von String zu int Java Basics - Anfänger-Themen 2
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
N null in String replacen Java Basics - Anfänger-Themen 16
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
M Eclipse kennt keine String Klasse mehr Java Basics - Anfänger-Themen 1
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
D String mit int multiplizieren? Java Basics - Anfänger-Themen 16
H Überprüfen ob String Array leer ist Java Basics - Anfänger-Themen 4
A Korrigierte <String> Liste zurückgeben Java Basics - Anfänger-Themen 22
C In String, Buchstaben ersetzen durch andere Buchstaben Java Basics - Anfänger-Themen 26
Poppigescorn String mit mehreren Wörtern füllen? Java Basics - Anfänger-Themen 4
I String Expression mit Java validieren (true / false) Java Basics - Anfänger-Themen 34
B String - Wörter finden, welches Punkt und entsprechender Pre / Suffix hat? Java Basics - Anfänger-Themen 30
T Maximale Anzahl von Konsonanten im String Java Basics - Anfänger-Themen 6
H String verschlüsseln - eigener Algorithmus Java Basics - Anfänger-Themen 104
N Aus einem String die Anzahl der Vokale auslesen Java Basics - Anfänger-Themen 40
J Eintrag Combobox über einen String auswählen Java Basics - Anfänger-Themen 3
K mit String.splitt(",") ganzen Satz erhalten? Java Basics - Anfänger-Themen 3
K Wie String prüfen ob drei mal das gleiche Zeichen vorkommt? Java Basics - Anfänger-Themen 7
I Validation, ob String ein Wert aus einem Enum enthält Java Basics - Anfänger-Themen 3
D String und char in String speichern Java Basics - Anfänger-Themen 5
A ObservableList<String> Java Basics - Anfänger-Themen 6
I String nach Wort suchen Java Basics - Anfänger-Themen 6
I String ersetzen, der Inhalt enthält Java Basics - Anfänger-Themen 4
L ArrayList<String> --> double[] array Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben