2 ComboBox(en)

mihe7

Top Contributor
Das sieht aktuell nicht verkehrt aus. Du solltest aber nicht von außen auf die Felder des Panels zugreifen.

D. h. panel.jTableFilialen_Deutschland.setModel(branches); aus EditData() rausnehmen und in
Java:
public PanelBranchesDomestic (BranchRepository branchRepo) {
    this.branchRepo = branchRepo;   
    initComponents();
    jTableFilialen_Deutschland.setModel(new BranchModel(branchRepo, Location.DOMESTIC));
}
reinnehmen (man müsste im UI-Builder auch das Model der ComboBox einstellen und dort Code angeben können, dann wäre der Code in initComponents()).

Warum Du jetzt nichts siehst, weiß ich so nicht. Dafür bräuchte man den aktuellen Code bzgl. BranchRepository, BranchModel, usw. inkl. der Stelle, wo Du die DB-Connection "öffnest".
 

maGG

Bekanntes Mitglied
Ok, super .. wenigstens etwas mal richtig :D

öffnen tue ich die Datenbank hier:
Java:
    public EditData() {
        initComponents();
        ConnectDb();
        branchRepos = new BranchRepository(conn);
    }
    Connection conn = null;
    BranchRepository branchRepos = null;
   
    private Connection ConnectDb() {
        try {
            conn = DriverManager.getConnection("jdbc:sqlite:" + System.getProperty("user.home") + "/Desktop/Standorte_Adressen.db");
            return conn;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex);
            return null;
        }
    }
Konstruktor Aufruf im BranchModel:
Java:
    public BranchModel(BranchRepository branches, Branch.Location location) {
        this.branches = branches;
        this.location = location;
        try {
            data = branches.findAll(location);
        } catch (SQLException e) {
            data = new ArrayList<>();
            e.printStackTrace();
        }
    }
Konstruktor Aufruf in BranchRepository:
Java:
    public BranchRepository(Connection conn) {
        this.conn = conn;
    }
findAll Methode in BranchRepository:
Java:
    public List<Branch> findAll(Location where) throws SQLException {
        String sql = LOCATION.get(where);
        try(PreparedStatement pst = conn.prepareStatement(sql)) {
            try(ResultSet rs = pst.executeQuery()){
                List<Branch> result = new ArrayList<>();
                while(rs.next()) {
                    result.add(readBranch(rs));
                }
                return result;            
            }
        }
    }
readBranchMethode in BranchRepository:
Java:
    private Branch readBranch(ResultSet rs) throws SQLException {
        return new Branch(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getInt(6), rs.getLong(7), rs.getString(8), rs.getInt(9), rs.getString(10), rs.getString(11));
    }
Sieht doch richtig aus oder? :O
 

mihe7

Top Contributor
Ja, das sieht alles schon mal sehr gut aus. Ich sehe nur nicht, dass Du branchRepos irgendwo verwenden würdest (in EditData). Wenn Du das in initComponents() machst, musst Du initComponents() ans Ende des Konstruktors schieben, sonst ist branchRepos noch nicht gesetzt.
 

maGG

Bekanntes Mitglied
Ok, habe ich geändert. Leider keine Veränderug. Gibt es noch etwas was ich checken könnte? Also die Datei befindet sich tatsächlich noch auf dem Desktop :D
 

maGG

Bekanntes Mitglied
branchRepos habe ich zwei Mal:
In der Klasse EditData, mit "BranchRepository branchRepos = null;"
in der Klasse PanelBranchDomestic, ebenfalls mit BranchRepository branchRepos = null; <- hier als Übergabeparameter

Die JCombBox habe ich nirgens initialisiert, da sie jetzt im neuen Fenster EditData nicht vorhanden ist. Die ComboBox ist in dem Hauptfenster Main und soll dort Parameter mit Werten belegen, die dann in einer späteren Writer Methode zum erstellen von Textdateien benutzt wird. Die ComboBox ist also nicht dazu da, um die Textfelder in EditData mit Werte zu belegen, diese Werte sollen nur mit einem MouseClicked und KeyReleased Event mit setText() belegt werden. Zu mindest habe ich mir das jetzt so überlegt. So wird beim Start des Programms nur noch das Hauptfenster geladen, was dann hoffentlich schneller geht, und das Fenster EditData kann man öffnen, wenn man Einträge in der Datenbank editieren möchte. Man könnte dann noch ein Passwort setzen, welches man in einem simplen JOptionPane eingeben muss, um ins zweite Fenster zu gelangen. Also ich würde am liebsten erst mal mich ums EditData Fenster kümmern und dort alles zu Ende schreiben, bevor ich mich dann um die JComboBox kümmere.

Die Connection conn habe ich jetzt provisorisch in EditData drin, damit ich testen kann. Später ist es bestimmt sinvoller, wie du ja schon geschrieben hast, die conn einmal aufzurufen und dann zu übergeben.
 
Zuletzt bearbeitet:

mihe7

Top Contributor
So wird beim Start des Programms nur noch das Hauptfenster geladen, was dann hoffentlich schneller geht, und das Fenster EditData kann man öffnen, wenn man Einträge in der Datenbank editieren möchte.
Ach so, dann schreiben wir die ganze Zeit aneinander vorbei :) Was soll in dem Fenster denn alles sein?
 

maGG

Bekanntes Mitglied
Ok, dann musst Du die JTable mit dem BranchModel irgendwo initialisieren.
Mache ich das nicht schon im Panel hiermit?
Java:
jTableFilialen_Deutschland.setModel(new BranchModel(branchRepos, Location.DOMESTIC));
Oder meinst du sowas?
Java:
    public PanelBranchesDomestic(BranchRepository branchRepos, BranchModel branchModel) {
        this.branchRepos = branchRepos;
        this.branchModel = new BranchModel(branchRepos, Location.DOMESTIC);
        initComponents();
        jTableFilialen_Deutschland.setModel(branchModel);
    }
   
    BranchRepository branchRepos = null;
    BranchModel branchModel = null;
 

mihe7

Top Contributor
Du hast also ein EditData-Frame, das z. B. ein PanelBranchesDomestic enthält, richtig? In Kommentar #156 fehlt mir die Stelle, an der Du das PanelBranchesDomestic erzeugst.

Im Konstruktor von PanelBranchesDomestic brauchst Du das branchModel nicht nochmal erstellen - Du bekommst es ja schon als Parameter.
 

maGG

Bekanntes Mitglied
Ah auf so eine ähnliche Idee kam ich auch gerade; ich habe die Panels als Datei erstellt, dann einmal auf Compile File geklickt und dann mit Drag and Drop in das TabbedPane von EditData gezogen - mehr habe ich nicht gemacht. Ich sehe gerade in der initComponent Methode wird nur der Standardkonstruktor aufgerufen. Kann es sein, dass ich den Allgemeinen aufrufen muss, mit unseren Anpassungen?

Sowas?
Java:
panelBranchesDomestic = new UserInterface.PanelBranchesDomestic(branchRepos);

initComponents:
Java:
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                        
    private void initComponents() {

        jButton5 = new javax.swing.JButton();
        jTabbedPane = new javax.swing.JTabbedPane();
        panelBranchesDomestic = new UserInterface.PanelBranchesDomestic();
        panelBranchesForeign = new UserInterface.PanelBranchesForeign();
        panelCompanyNames = new UserInterface.PanelCompanyNames();
        panelTitels = new UserInterface.PanelTitels();
        panelRoles1 = new UserInterface.PanelRoles();
        jButton8 = new javax.swing.JButton();
        jLabelDBPath = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setPreferredSize(new java.awt.Dimension(1082, 587));
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }
        });

        jButton5.setIcon(new javax.swing.ImageIcon("C:\\Users\\david\\Documents\\back-icon.png")); // NOI18N
        jButton5.setText("Zurück zum Hauptfenster");
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });

        jTabbedPane.addTab("Filialen_Deutschland", panelBranchesDomestic);
        jTabbedPane.addTab("Filialen_Ausland", panelBranchesForeign);
        jTabbedPane.addTab("Firmierungen", panelCompanyNames);
        jTabbedPane.addTab("Titel", panelTitels);
        jTabbedPane.addTab("Funktionen", panelRoles1);

        jButton8.setIcon(new javax.swing.ImageIcon("C:\\Users\\david\\Documents\\My-Documents-icon.png")); // NOI18N
        jButton8.setText("Datenbank laden");
        jButton8.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton8ActionPerformed(evt);
            }
        });

        jLabelDBPath.setText(" ");

        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()
                .addComponent(jButton5)
                .addGap(18, 18, 18)
                .addComponent(jButton8)
                .addGap(121, 121, 121)
                .addComponent(jLabelDBPath)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addComponent(jTabbedPane)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton5)
                    .addComponent(jButton8)
                    .addComponent(jLabelDBPath))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTabbedPane, javax.swing.GroupLayout.PREFERRED_SIZE, 534, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

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

    // Variables declaration - do not modify                    
    private javax.swing.JButton jButton5;
    private javax.swing.JButton jButton8;
    private javax.swing.JLabel jLabelDBPath;
    private javax.swing.JTabbedPane jTabbedPane;
    private UserInterface.PanelBranchesDomestic panelBranchesDomestic;
    private UserInterface.PanelBranchesForeign panelBranchesForeign;
    private UserInterface.PanelCompanyNames panelCompanyNames;
    private UserInterface.PanelRoles panelRoles1;
    private UserInterface.PanelTitels panelTitels;
    // End of variables declaration
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Kann es sein, dass ich den Allgemeinen aufrufen muss, mit unseren Anpassungen?
Jawoll. Du kannst im UI Builder in den Properties bei "custom creation" (oder so ähnlich) angeben, wie die Komponente erstellt werden solll. Dort schreibst Du "new UserInterface.PanelBranchesDomestic(branch, branches);" rein (hoffe, die Namen stimmen noch). Dann sollte das so in initComponents übernommen werden.
 

maGG

Bekanntes Mitglied
Ah cool!

Moment, im Allgemeinen Konstruktor von PanelBranchDomestic habe ich aktuell nur (BranchRepository branchRepos) als Übergabeparamenter. Das mit dem Model war nur geraten :D Oder müssen da wirklich zwei Parameter rein?

Also:
Java:
//Klasse des Panels
public class PanelBranchesDomestic extends javax.swing.JPanel {

    public PanelBranchesDomestic() {
        initComponents();
    }
    
    public PanelBranchesDomestic(BranchRepository branchRepos) {
        this.branchRepos = branchRepos;
        initComponents();
        jTableFilialen_Deutschland.setModel(new BranchModel(branchRepos, Location.DOMESTIC));       
    }
    
    BranchRepository branchRepos = null;
    
    private void initComponents() {
        //...
    }
    
    //Variable declaration ...
}

//Klasse des EditData Fensters
public class EditData extends javax.swing.JFrame {

    public EditData() {
        branchRepos = new BranchRepository(conn);
        initComponents();
        setLocationRelativeTo(null);
        setResizable(false);
        ConnectDb();
    }
    
    Connection conn = null;
    BranchRepository branchRepos = null;
    
    private Connection ConnectDb() {
        try {
            conn = DriverManager.getConnection("jdbc:sqlite:" + System.getProperty("user.home") + "/Desktop/KERN_Standorte_Adressen.db");
            return conn;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, ex);
            return null;
        }
    }
    
    private void initComponents() {
        panelBranchesDomestic = new UserInterface.PanelBranchesDomestic(branchRepos);
        //...
    }
    
    private UserInterface.PanelCompanyNames panelCompanyNames;
    //..

}
Bekomme so aber leider wieder eine Nullpointer:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at RepositoryClasses.BranchRepository.findAll(BranchRepository.java:75)
    at ModelClasses.BranchModel.<init>(BranchModel.java:42)
    at UserInterface.PanelBranchesDomestic.<init>(PanelBranchesDomestic.java:29)
    at UserInterface.EditData.initComponents(EditData.java:70)
    at UserInterface.EditData.<init>(EditData.java:25)
    at UserInterface.EditData$4.run(EditData.java:188)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Java:
//at RepositoryClasses.BranchRepository.findAll(BranchRepository.java:75)
try(PreparedStatement pst = conn.prepareStatement(sql)) {

//at ModelClasses.BranchModel.<init>(BranchModel.java:42)
data = branches.findAll(location);

//at UserInterface.PanelBranchesDomestic.<init>(PanelBranchesDomestic.java:29)
jTableFilialen_Deutschland.setModel(new BranchModel(branchRepos, Location.DOMESTIC));   

//at UserInterface.EditData.initComponents(EditData.java:70)
panelBranchesDomestic = new UserInterface.PanelBranchesDomestic(branchRepos);

//at UserInterface.EditData.<init>(EditData.java:25)
initComponents();

//at UserInterface.EditData$4.run(EditData.java:188)
new EditData().setVisible(true);
 

maGG

Bekanntes Mitglied
Cool, es funktioniert inzwischnen :D

Wie kann ich denn in der Struktur jetzt mit der setCurrent Methode das entsprechend handhaben? Also in der Klasse BranchViewDomestic habe ich die setCurent drin, wo die entsprechenden Texfelder gesetzt werden. Die Methode benötigt aos Übergabe ein Objekt vom Typ Branch. Von der Struktur her bräuchte ich jetzt eine Methode in BranchModel oder? Kann ich mir da was aus den abstrakten Methoden des BranchModels was basteln?
Habe gesehen, dass du bei PersonView das beim erstellen der Tabelle geschrieben hast, davon versehe ich aber nicht alles:

Java:
    private JTable createTable() {
        JTable table = new JTable(persons);
        table.getSelectionModel().addListSelectionListener(e -> {
            if (e.getValueIsAdjusting()) {
                return;
            }
            int row = table.getSelectedRow();
            setCurrent(row != -1 ? persons.getElementAt(row) : null);
        });       
        setCurrent(null);
        return table;
    }
Den ListSelectionListener brauche ich ja nicht mehr oder? Also, weil ich jetzt EventMouseOver und EventKeyReleased benutze
 

mihe7

Top Contributor
Also in der Klasse BranchViewDomestic habe ich die setCurent drin, wo die entsprechenden Texfelder gesetzt werden
Mal eine doofe Frage: unterscheiden sich BranchViewDomestic und BranchViewForeign irgendwie (mal von der Location abgesehen)? Wenn nein, wäre es Zeit für ein Refactoring: BranchView mit Location als Parameter :)

Ansonsten: setCurrent bekommt ein Branch-Objekt und setzt die Textfelder. Was willst Du da noch basteln?

Nachtrag: habe gerade BranchView mit den Panels verwechselt. Wenn ich mich recht entsinne, war das die Klasse, deren Methode Du ins Panel übernehmen kannst.
 

maGG

Bekanntes Mitglied
Mal eine doofe Frage: unterscheiden sich BranchViewDomestic und BranchViewForeign irgendwie (mal von der Location abgesehen)? Wenn nein, wäre es Zeit für ein Refactoring: BranchView mit Location als Parameter :)
Im Prinzip nicht, allerdings gibt es für DOMESTIC und FOREIGN jeweils eine andere JTabel (jTableFilialen_Deutschland und jTableFilialen_Ausland). Das heißt in der setCurrent Methode setze ich ja String Werte für die die 11 JTextFields. In den jTableFilialen_Deutschland heißen die Felder jTextFieldD1 bis jTextFieldD11 und bei jTableFilialen_Ausland dann jTextFieldA1 bis jTextFieldA11. Alternativ könnte ich mir die setCurrent Methode auch sparen und mir in die GUI Methode schreiben, aber dann kann hab ich ja nicht mehr diese schöne Verschachtelung ^^
Ansonsten: setCurrent bekommt ein Branch-Objekt und setzt die Textfelder. Was willst Du da noch basteln?

Nachtrag: habe gerade BranchView mit den Panels verwechselt. Wenn ich mich recht entsinne, war das die Klasse, deren Methode Du ins Panel übernehmen kannst.
Ja genau, aber wie bekomme ich jetzt an das Branch Objekt ran? Mache ich das mit SelectedRow von der JTable?
 

mihe7

Top Contributor
Wenn Deine Panels identisch sind, kannst Du eine Klasse draus machen. Du musst ja nur zwei Instanzen davon erstellen, einmal mit Location.DOMESTIC und einmal mit Location.FOREIGN. In dem Panel heißen die Felder dann neutral. Die View-Klasse kannst Du Dir sparen, weil setCurrent ja gerade dazu dient, die Textfelder zu setzen. Das Branch-Objekt bekommst Du vom BranchModel über die ausgewählte Zeile der Tabelle.
 

maGG

Bekanntes Mitglied
In dem Panel heißen die Felder dann neutral
Das versteht ich nicht, geht sowas?
Java:
    private void jTableFilialen_DeutschlandKeyReleased(java.awt.event.KeyEvent evt) {                                                       
        if(evt.getKeyCode() == KeyEvent.VK_UP || evt.getKeyCode() == KeyEvent.VK_DOWN) {
            int row = jTableFilialen_Deutschland.getSelectedRow();
            Branch branch = branchModel.getElementAt(row);
            branchView.setCurrent(branch);
        }
    }
So in etwa?
 

mihe7

Top Contributor
Das, was in Deinem if-Zweig ist: genau.

Zwei Dinge:
1. warum willst Du einen KeyListener verwenden?
2. zum Thema neutrale Bezeichnung. Mal in mehreren Absätzen:

Aktuell hast Du ja ein "Deutschland-Panel" und ein "Auslands-Panel". Du kannst innerhalb der beiden Panels die Felder neutral bezeichnen, weil ja durch die Klasse schon klar ist, ob Deutschland oder Ausland.

Sprich: statt jTableFilialen_Deutschland nennst Du das Feld einfach jTableFilialen.

Wenn dann die Panels auch noch identisch sind, kannst Du eines in die Tonne treten. Dann machst Du z. B. aus PanelBranchesDomestic einfach nur ein PanelBranches und gibst im Konstruktor die Location mit. In EditData erzeugst Du dann einfach zwei PanelBranches - jeweils mit der betreffenden Location.
 

maGG

Bekanntes Mitglied
1. warum willst Du einen KeyListener verwenden?
Weil ich keine anderen Möglichkeit kenne, um die Texfelder mit den Werten zu belegen, wenn man mit den Pfeiltasten hoch und runter geht. Es ist auch noch ein MouseClicked vorgesehen, oder hast du eine andere Idee?

zu 2. das würde ich später noch machen, jeztzt hab ich schon wieder ne NullPointer bei dem Code oben:mad:
 

mihe7

Top Contributor
Java:
import javax.swing.*;
import javax.swing.table.*;

public class Test {
    public void run() {
        TableModel dataModel = new AbstractTableModel() {
            public int getColumnCount() { return 10; }
            public int getRowCount() { return 10;}
            public Object getValueAt(int row, int col) { return new Integer(row*col); }
        };
        JTable table = new JTable(dataModel);
        table.setRowSelectionAllowed(true);
        table.getSelectionModel().addListSelectionListener(e -> {
            if (e.getValueIsAdjusting()) {
                return;
            }
            System.out.println(table.getSelectedRow());
        });
        JScrollPane scrollpane = new JScrollPane(table);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(scrollpane);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
 

maGG

Bekanntes Mitglied
Ah cool, das ist natürlich was Feines :D

Java:
    private void tableListener() {
        table.setRowSelectionAllowed(true);
        table.getSelectionModel().addListSelectionListener(e -> {
            if (e.getValueIsAdjusting()) {
                return;
            }
            //System.out.println(table.getSelectedRow() + 1);
            int row = table.getSelectedRow() + 1;
            branch = branchModel.getElementAt(row);
            branchView.setCurrent(branch);
        });   
    }
komischerweise ist die Zahl immer um 1 zu klein gewesen.

In der Zeile branchView.setCurrent(branch); bekomme ich aber wieder eine NullPointer Ex. Ich vermute mal das an der Methode was falsch ist;
Java:
  public void setCurrent(Branch branch) {
        this.current = branch;
        boolean valid = current != null;
        if (valid) {
            panel.jTextFieldD1.setText("" + current.getId());
            panel.jTextFieldD2.setText(current.getLabel());
            panel.jTextFieldD3.setText(current.getStrasze());
            panel.jTextFieldD4.setText(current.getPlzort());       
            panel.jTextFieldD5.setText(current.getOrt());
            panel.jTextFieldD8.setText("" + current.getVorwahl());
            panel.jTextFieldD6.setText("" + current.getTelStartNum());
            panel.jTextFieldD7.setText(current.getTelStartTxt());
            panel.jTextFieldD9.setText("" + current.getTelEndDefault());
            panel.jTextFieldD10.setText(current.getFaxStartTxt());
            panel.jTextFieldD11.setText(current.getFaxEndTxt());
        } else {
            panel.jTextFieldD1.setText("");
            panel.jTextFieldD2.setText("");
            panel.jTextFieldD3.setText("");
            panel.jTextFieldD4.setText("");       
            panel.jTextFieldD5.setText("");
            panel.jTextFieldD8.setText("");
            panel.jTextFieldD6.setText("");
            panel.jTextFieldD9.setText("");
            panel.jTextFieldD10.setText("");
            panel.jTextFieldD11.setText("");
        }
        panel.jTextFieldD1.setEnabled(valid);
        panel.jTextFieldD2.setEnabled(valid);
        panel.jTextFieldD3.setEnabled(valid);
        panel.jTextFieldD4.setEnabled(valid);     
        panel.jTextFieldD5.setEnabled(valid);
        panel.jTextFieldD8.setEnabled(valid);
        panel.jTextFieldD6.setEnabled(valid);
        panel.jTextFieldD7.setEnabled(valid);
        panel.jTextFieldD9.setEnabled(valid);
        panel.jTextFieldD10.setEnabled(valid);
        panel.jTextFieldD11.setEnabled(valid);
        panel.jButtonUpdateD.setEnabled(valid);
        panel.jButtonSaveD.setEnabled(valid);
        panel.jButtonDeleteD.setEnabled(valid);   
    }
Es wird halt kein Fehler angezeigt :O
 

maGG

Bekanntes Mitglied
Wie meinst Du das? Die Indizes beginnen wie üblich mit 0, erste Zeile ist also 0.
naja bei dem System.out.printLine.. kommt immer eine Zahl die sonst um 1 zu klein ist.
Wenn Du in der Zeile eine NPE bekommst, muss branchView == null gelten.
Jo, das geht aber gar nicht eigentlich. Sonst müsste auch ja schon das Anzeigen der Werte in der Tabelle nicht klappen. Gut, dort habe ich BranchViewDomestic gar nicht benutzt. Aber auch durch setzen von
Java:
BranchViewDomestic branchView = new BranchViewDomestic(branchModel);
kommt noch NullPointer :rolleyes:
 

mihe7

Top Contributor
Schau Dir den Stacktrace nochmal genau an. Wenn die NPE wirklich originär in der Zeile entsteht, muss branchView == null gelten -> das geht nicht anders. Evtl. passiert es aber innerhalb der BranchViewDomestic, das würdest Du dann aber im Stacktrace sehen.
 

maGG

Bekanntes Mitglied
ja, da steht das hier:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at ModelClasses.BranchViewDomestic.setCurrent(BranchViewDomestic.java:40)
    at UserInterface.PanelBranchesDomestic.lambda$tableListener$0(PanelBranchesDomestic.java:61)
Ich vermute auch, dass es an der setCurrent Methode liegt, aber dann dürfe es eigentlich keine NullPointer sein, sondern irgendeine andere Exception. Zeile 40 macht das hier:
Java:
panel.jTextFieldD1.setText("" + current.getId());
sehe ich kein Fehler drin.
 

mihe7

Top Contributor
Naja, panel, jTextFieldD1 und/oder current muss/müssen null sein, damit hier eine NPE fliegt. Du kannst ja mal einen Haltepunkt setzen und den Debugger starten. Dann kannst Du Dir live ansehen, wo das Problem liegt.
 

maGG

Bekanntes Mitglied
ja danke, werde ich mal testen. Wobei ich inzwischen am überlegen bin mein alten Code wieder zu nehmen. Der ist zwar viel schlechter, aber er funktioniert wenigstens und ich habe nicht ständig NPEs. Es ist extrem frustrierend, wenn man für so ne Kleinigkeit Stunden oder gar Tage benötigt und ich muss das Ding auch mal fertig bekommen.
 

mrBrown

Super-Moderator
Mitarbeiter
Ich würde an deiner Stelle mit dem Coder weiter machen ;)
NPEs sind mit die einfachsten Fehler, dein alter Code würde dich vermutlich vor deutlich komplexere Probleme stellen
 

mihe7

Top Contributor
Wobei ich inzwischen am überlegen bin mein alten Code wieder zu nehmen. Der ist zwar viel schlechter, aber er funktioniert wenigstens und ich habe nicht ständig NPEs.
Eine NPE entsteht immer dadurch, dass eine Referenz null ist. Du weißt also in welcher Zeile und meist auch sofort welche Referenz. Insofern ist das sehr einfach zu beheben.

Ich kenne jetzt den Rest des aktuellen Codes nicht, sonst hätte ich da mal reingeschaut. Meine Vermutung wäre: Du nimmst immer noch diese seltsamen View-Klassen her, instantiierst diese, bevor das betreffende Panel-Objekt (vollständig) initialisiert ist. Ist aber nur eine Vermutung.
 

maGG

Bekanntes Mitglied
seltsamen View-Klassen
naja das ist eigentlich nach deinem Modell erstell. Nur das du halt kein GUI Builder benutzt hast und die Tabelle in der selben Klasse erstellst hast, wo du auch die Textfelder belegt hast. Ich habe jetzt halt ein View Klasse und eine Klasse wo die Texfelder deklariert sind. Um Zugriff auf diese zu haben muss ich also die Felder public machen und eine Object aus der GUI Klasse in meiner View Klasse erzeugen und dann habe ich erst Zugriff.

Ich bin mal die Verschachtelunge durchgegangen und geschaut wo was initialisiert wird. Es sieht alles richtig aus (auch dei Reihenfolge). Jetzt Könnte vielleicht das Erzeugene des Object.

Das habe ich so gemacht:
Java:
import UserInterface.PanelBranchesDomestic;

public class BranchViewDomestic {
    private PanelBranchesDomestic panel;

    //...
    
    public void setCurrent(Branch branch) {
        //...
        panel.jTextFieldD1.setText("" + current.getId());
        //..
    }
}
Ist das etwas falsch?
 

mihe7

Top Contributor
naja das ist eigentlich nach deinem Modell erstell.
Die Namen machen nicht das Modell :)
Ich habe jetzt halt ein View Klasse und eine Klasse wo die Texfelder deklariert sind. Um Zugriff auf diese zu haben muss ich also die Felder public machen und eine Object aus der GUI Klasse in meiner View Klasse erzeugen und dann habe ich erst Zugriff.
Und genau das ist falsch. Du hebst jegliche Kapselung auf, weil Du Dinge trennst, die zusammengehören (Google mal nach Kopplung und Kohäsion).

Ist das etwas falsch?
Das lässt sich auf Grundlage des Schnipsels nicht sagen. Das Einzige, was sicher ist: wenn in einer Zeile (originär) eine NPE auftritt, dann wird auf eine null-Referenz zugegriffen. In der Zeile panel.jTextFieldD1.setText("" + current.getId()); kann eine NPE nur auftreten, wenn panel, jTextFieldD1 oder current null ist. Du brauchst Dir ja nur mal die Werte ausgeben zu lassen (System.out.println(panel); ...)
 

maGG

Bekanntes Mitglied
Du hebst jegliche Kapselung auf, weil Du Dinge trennst, die zusammengehören
Das heißt die Klasse ViewBranchDomestic würdest du löschen und den Code lieber direkt in mein Panel schreiben? Das kann ich auch machen, dann habe ich halt keine View Klasse mehr und die Methode setCurrent, add, update, delete etc. müsste ich dann alle in mein Panel, also dann für jedes Panel die gleichen Methoden.

Ich habe es mal ausprobiert und die setCurrent Methode in mein Panel geschriebe; funktioniert jetzt so. Aber dachte ich sollte solche Sachen immer trennen und copy & paste vermeiden :O
 

mihe7

Top Contributor
Das heißt die Klasse ViewBranchDomestic würdest du löschen und den Code lieber direkt in mein Panel schreiben?
Ja, das schreibe ich schon die ganze Zeit :)

Das kann ich auch machen, dann habe ich halt keine View Klasse mehr und die Methode setCurrent, add, update, delete etc. müsste ich dann alle in mein Panel, also dann für jedes Panel die gleichen Methoden.
Nein, wenn Du's richtig machst, hast Du wahrscheinlich nur noch eine Panel-Klasse (s. Kommentar #169).

Aber dachte ich sollte solche Sachen immer trennen und copy & paste vermeiden :O
Jein. Es geht darum, halbwegs vernünftige Abstraktionen zu finden, dadurch vermeidet man Copy & Paste. Wenn unterschiedliche Konzepte gleiche Eigenschaften besitzen, dann ist das eben so. Wenn ich Deine zwei Panels nehme (s. #169), dann schaut es so aus, als wären die identisch. Dann schreibt man eine Panel-Klasse und verwendet diese öfter (in Form mehrerer Objekte).
 

maGG

Bekanntes Mitglied
wie kann ich mit meiner save/insert Methode eine neues Branch Object in meiner Liste erzeugen? Im Moment funktioniert meine save Methode ungewollt wie eine update Methode :D

Java:
    public void save() {
        if (this.current == null) {
            return;
        }
        current.setId(Integer.parseInt(jTextFieldBranch1.getText()));
        current.setLabel(jTextFieldBranch2.getText());
        current.setStrasze(jTextFieldBranch3.getText());
        current.setPlzort(jTextFieldBranch4.getText());
        current.setOrt(jTextFieldBranch5.getText());
        current.setVorwahl(Integer.parseInt(jTextFieldBranch8.getText()));
        current.setTelStartNum(Long.parseLong(jTextFieldBranch6.getText()));
        current.setTelStartTxt(jTextFieldBranch7.getText());
        current.setTelEndDefault(Integer.parseInt(jTextFieldBranch9.getText()));
        current.setFaxEndTxt(jTextFieldBranch10.getText());
        current.setFaxEndTxt(jTextFieldBranch11.getText());
        if (current.getId() == 0L) {
            branchModel.add(current); 
        } else {
            //branchModel.update(current); // was wolltest du hier eigentlich machen? Wieso die Verzweigung hier?
        }
        jTableBranch.setModel(branchModel);  // hiermit wollte ich die JTable nach eine Änderunge aktualiseren, geht noch nicht
    }
 
Zuletzt bearbeitet:

mihe7

Top Contributor
wie kann ich mit meiner save/insert Methode eine neues Branch Object in meiner Liste erzeugen? Im Moment funktioniert meine save Methode ungewollt wie eine update Methode
Indem Du die if-Abfrage unten rausnimmst und immer branchModel.add() aufrufst. Die letzte Zeile (jTableBranch.setModel) ebenfalls entfernen. Das JTable wird jetzt automatisch aktualisiert :)
 

maGG

Bekanntes Mitglied
Ne leider funktioniert das noch nicht so toll bei mir :oops:

Mein Panel Klasse sieht jetzt so aus (habe einige Sachen geändert, z.B. habe ich jetzt nur ein Panel für die Branches)

Java:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package UserInterface;

import java.awt.Color;
import ObjectClasses.Branch;
import ObjectClasses.Branch.Location;
import ModelClasses.BranchModel;
import RepositoryClasses.BranchRepository;

/**
 *
 * @author david
 */
public class PanelBranches extends javax.swing.JPanel {

    /**
     * Creates new form BranchesDomestic
     */
    
    public PanelBranches() {
        initComponents();
    }
    
    public PanelBranches(BranchRepository branchRepos, Location location) {
        this.branchRepos = branchRepos;
        branchModel = new BranchModel(branchRepos, location);
        initComponents();       
        adjustAppearance();
        tableListener();
        /*
            Model wird in initComponents gesetzt
            branchModel = new BranchModel(branchRepos, location);
            jTableBranch.setModel(branchModel);
        */
    }

    BranchModel branchModel = null;
    BranchRepository branchRepos = null;
    Branch branch, current = null;
 
    private void adjustAppearance() {
        setBackground(new Color(0,0,0,0));
        jTableBranch.getTableHeader().setOpaque(false);
        jTableBranch.getTableHeader().setBackground(new Color(128, 128, 128));
        jTableBranch.getTableHeader().setForeground(Color.WHITE);
    }

    private void setCaretPositions() {
        jTextFieldBranch1.setCaretPosition(0);
        jTextFieldBranch2.setCaretPosition(0);
        jTextFieldBranch3.setCaretPosition(0);
        jTextFieldBranch4.setCaretPosition(0);     
        jTextFieldBranch5.setCaretPosition(0);
        jTextFieldBranch8.setCaretPosition(0);
        jTextFieldBranch6.setCaretPosition(0);
        jTextFieldBranch9.setCaretPosition(0);
        jTextFieldBranch10.setCaretPosition(0);
        jTextFieldBranch11.setCaretPosition(0);
    }
    
    private void tableListener() {
        jTableBranch.setRowSelectionAllowed(true);
        jTableBranch.getSelectionModel().addListSelectionListener(e -> {
            if (e.getValueIsAdjusting()) {
                return;
            }
            int row = jTableBranch.getSelectedRow();
            branch = branchModel.getElementAt(row);
            setCurrent(branch);
            setCaretPositions();
        });   
    }
    
    private void setCurrent(Branch branch) {
        this.current = branch;
        boolean valid = current != null;
        if (valid) {
            jTextFieldBranch1.setText("" + current.getId());
            jTextFieldBranch2.setText(current.getLabel());
            jTextFieldBranch3.setText(current.getStrasze());
            jTextFieldBranch4.setText(current.getPlzort());       
            jTextFieldBranch5.setText(current.getOrt());
            jTextFieldBranch8.setText("" + current.getVorwahl());
            jTextFieldBranch6.setText("" + current.getTelStartNum());
            jTextFieldBranch7.setText(current.getTelStartTxt());
            jTextFieldBranch9.setText("" + current.getTelEndDefault());
            jTextFieldBranch10.setText(current.getFaxStartTxt());
            jTextFieldBranch11.setText(current.getFaxEndTxt());
        } else {
            jTextFieldBranch1.setText("");
            jTextFieldBranch2.setText("");
            jTextFieldBranch3.setText("");
            jTextFieldBranch4.setText("");       
            jTextFieldBranch5.setText("");
            jTextFieldBranch8.setText("");
            jTextFieldBranch6.setText("");
            jTextFieldBranch9.setText("");
            jTextFieldBranch10.setText("");
            jTextFieldBranch11.setText("");
        }
        jTextFieldBranch1.setEnabled(valid);
        jTextFieldBranch2.setEnabled(valid);
        jTextFieldBranch3.setEnabled(valid);
        jTextFieldBranch4.setEnabled(valid);     
        jTextFieldBranch5.setEnabled(valid);
        jTextFieldBranch8.setEnabled(valid);
        jTextFieldBranch6.setEnabled(valid);
        jTextFieldBranch7.setEnabled(valid);
        jTextFieldBranch9.setEnabled(valid);
        jTextFieldBranch10.setEnabled(valid);
        jTextFieldBranch11.setEnabled(valid);
        jButtonUpdateBranch.setEnabled(valid);
        jButtonSaveBranch.setEnabled(valid);
        jButtonDeleteBranch.setEnabled(valid);   
    }
    
    private void update(Branch branch) {
        this.current = branch;
        if(this.current == null) {
            return;
        }
        current.setId(Integer.parseInt(jTextFieldBranch1.getText()));
        current.setLabel(jTextFieldBranch2.getText());
        current.setStrasze(jTextFieldBranch3.getText());
        current.setPlzort(jTextFieldBranch4.getText());
        current.setOrt(jTextFieldBranch5.getText());
        current.setVorwahl(Integer.parseInt(jTextFieldBranch8.getText()));
        current.setTelStartNum(Long.parseLong(jTextFieldBranch6.getText()));
        current.setTelStartTxt(jTextFieldBranch7.getText());
        current.setTelEndDefault(Integer.parseInt(jTextFieldBranch9.getText()));
        current.setFaxEndTxt(jTextFieldBranch10.getText());
        current.setFaxEndTxt(jTextFieldBranch11.getText());
        branchModel.update(current);
    }
    
    private void save() {
        this.current = branch;       
        if (this.current == null) {
            return;
        }
        current.setId(Integer.parseInt(jTextFieldBranch1.getText()));
        current.setLabel(jTextFieldBranch2.getText());
        current.setStrasze(jTextFieldBranch3.getText());
        current.setPlzort(jTextFieldBranch4.getText());
        current.setOrt(jTextFieldBranch5.getText());
        current.setVorwahl(Integer.parseInt(jTextFieldBranch8.getText()));
        current.setTelStartNum(Long.parseLong(jTextFieldBranch6.getText()));
        current.setTelStartTxt(jTextFieldBranch7.getText());
        current.setTelEndDefault(Integer.parseInt(jTextFieldBranch9.getText()));
        current.setFaxEndTxt(jTextFieldBranch10.getText());
        current.setFaxEndTxt(jTextFieldBranch11.getText());
        branchModel.add(current);
    }     
    
    private void delete() {
        if(this.current == null) {
            return;
        }
        // do something
    }
    
    private void search() {
        if(this.current == null) {
            return;
        }
        // do something
    }
    
    /**
     * 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() {

        jTextFieldBranch1 = new javax.swing.JTextField();
        jTextFieldBranch2 = new javax.swing.JTextField();
        jTextFieldBranch3 = new javax.swing.JTextField();
        jTextFieldBranch4 = new javax.swing.JTextField();
        jTextFieldBranch5 = new javax.swing.JTextField();
        jTextFieldBranch6 = new javax.swing.JTextField();
        jTextFieldBranch7 = new javax.swing.JTextField();
        jTextFieldBranch8 = new javax.swing.JTextField();
        jTextFieldBranch9 = new javax.swing.JTextField();
        jTextFieldBranch10 = new javax.swing.JTextField();
        jTextFieldBranch11 = new javax.swing.JTextField();
        jLabelBranch1 = new javax.swing.JLabel();
        jLabelBranch2 = new javax.swing.JLabel();
        jLabelBranch3 = new javax.swing.JLabel();
        jLabelBranch4 = new javax.swing.JLabel();
        jLabeBranch5 = new javax.swing.JLabel();
        jLabelBranch6 = new javax.swing.JLabel();
        jLabelBranch7 = new javax.swing.JLabel();
        jLabelBranch8 = new javax.swing.JLabel();
        jLabelBranch9 = new javax.swing.JLabel();
        jLabelBranch10 = new javax.swing.JLabel();
        jLabelBranch11 = new javax.swing.JLabel();
        jScrollPaneBranch = new javax.swing.JScrollPane();
        jTableBranch = new javax.swing.JTable();
        jButtonUpdateBranch = new javax.swing.JButton();
        jButtonSaveBranch = new javax.swing.JButton();
        jButtonDeleteBranch = new javax.swing.JButton();
        jButtonClearBranch = new javax.swing.JButton();
        jTextFieldSearchBranch = new javax.swing.JTextField();
        jLabelSearchBranch = new javax.swing.JLabel();
        jSeparatorBranch = new javax.swing.JSeparator();

        setPreferredSize(new java.awt.Dimension(1077, 479));

        jLabelBranch1.setText("id:");

        jLabelBranch2.setText("LABEL:");

        jLabelBranch3.setText("STRASZE:");

        jLabelBranch4.setText("PLZ_ORT:");

        jLabeBranch5.setText("ORT (E-Mail):");

        jLabelBranch6.setText("TEL_LAND:");

        jLabelBranch7.setText("TEL_ANFANG_INT:");

        jLabelBranch8.setText("TEL_ANFANG_TXT:");

        jLabelBranch9.setText("TEL_ENDE_DEFAULT:");

        jLabelBranch10.setText("FAX_ANFANG_TXT:");

        jLabelBranch11.setText("FAX_ENDE_TXT:");

        jTableBranch.setModel(branchModel);
        jTableBranch.setOpaque(false);
        jTableBranch.setRowHeight(20);
        jTableBranch.getTableHeader().setResizingAllowed(false);
        jTableBranch.getTableHeader().setReorderingAllowed(false);
        jScrollPaneBranch.setViewportView(jTableBranch);

        jButtonUpdateBranch.setIcon(new javax.swing.ImageIcon("C:\\Users\\david\\Documents\\Actions-view-refresh-icon.png")); // NOI18N
        jButtonUpdateBranch.setText("Aktualisieren");
        jButtonUpdateBranch.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonUpdateBranchActionPerformed(evt);
            }
        });

        jButtonSaveBranch.setIcon(new javax.swing.ImageIcon("C:\\Users\\david\\Documents\\Database-Add-icon.png")); // NOI18N
        jButtonSaveBranch.setText("Hinzufügen");
        jButtonSaveBranch.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonSaveBranchActionPerformed(evt);
            }
        });

        jButtonDeleteBranch.setIcon(new javax.swing.ImageIcon("C:\\Users\\david\\Documents\\Actions-edit-delete-icon.png")); // NOI18N
        jButtonDeleteBranch.setText("Löschen");
        jButtonDeleteBranch.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonDeleteBranchActionPerformed(evt);
            }
        });

        jButtonClearBranch.setIcon(new javax.swing.ImageIcon("C:\\Users\\david\\Documents\\Actions-edit-clear-icon.png")); // NOI18N
        jButtonClearBranch.setText("Felder leeren");
        jButtonClearBranch.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonClearBranchActionPerformed(evt);
            }
        });

        jTextFieldSearchBranch.setForeground(java.awt.Color.lightGray);
        jTextFieldSearchBranch.setText(" mit Enter bestätigen...");
        jTextFieldSearchBranch.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldSearchBranchFocusLost(evt);
            }
        });
        jTextFieldSearchBranch.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTextFieldSearchBranchMouseClicked(evt);
            }
        });
        jTextFieldSearchBranch.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextFieldSearchBranchActionPerformed(evt);
            }
        });
        jTextFieldSearchBranch.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jTextFieldSearchBranchKeyReleased(evt);
            }
        });

        jLabelSearchBranch.setText("Suche:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabelBranch11)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabelBranch10)
                                .addGap(27, 27, 27)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jTextFieldBranch11, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch10, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabelBranch9)
                                    .addComponent(jLabelBranch8)
                                    .addComponent(jLabelBranch7)
                                    .addComponent(jLabelBranch6)
                                    .addComponent(jLabeBranch5)
                                    .addComponent(jLabelBranch4)
                                    .addComponent(jLabelBranch3)
                                    .addComponent(jLabelBranch2)
                                    .addComponent(jLabelBranch1))
                                .addGap(18, 18, 18)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jTextFieldBranch1, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch2, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch3, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch4, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch5, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch6, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch7, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch8, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch9, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                .addGroup(layout.createSequentialGroup()
                                    .addComponent(jLabelSearchBranch)
                                    .addGap(18, 18, 18)
                                    .addComponent(jTextFieldSearchBranch))
                                .addComponent(jSeparatorBranch, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 251, javax.swing.GroupLayout.PREFERRED_SIZE))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(78, 78, 78)
                        .addComponent(jButtonClearBranch)))
                .addGap(24, 24, 24)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPaneBranch, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButtonUpdateBranch)
                        .addGap(18, 18, 18)
                        .addComponent(jButtonSaveBranch)
                        .addGap(18, 18, 18)
                        .addComponent(jButtonDeleteBranch)
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jScrollPaneBranch, javax.swing.GroupLayout.PREFERRED_SIZE, 409, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(14, 14, 14)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jButtonUpdateBranch)
                            .addComponent(jButtonSaveBranch)
                            .addComponent(jButtonDeleteBranch))
                        .addGap(20, 20, 20))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldSearchBranch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelSearchBranch))
                        .addGap(10, 10, 10)
                        .addComponent(jSeparatorBranch, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(2, 2, 2)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch1))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch2))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch3))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch4))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabeBranch5))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch6))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch7))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch8))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch9))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch10))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch11, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch11))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jButtonClearBranch)
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
        );
    }// </editor-fold>                       

    private void jButtonUpdateBranchActionPerformed(java.awt.event.ActionEvent evt) {                                                   
        int row = jTableBranch.getSelectedRow();
        branch = branchModel.getElementAt(row);
        update(branch);
    }                                                   

    private void jButtonSaveBranchActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        save();
    }                                                 

    private void jButtonDeleteBranchActionPerformed(java.awt.event.ActionEvent evt) {                                                   
        //delete();
    }                                                   

    private void jButtonClearBranchActionPerformed(java.awt.event.ActionEvent evt) {                                                   
        jTextFieldBranch1.setText("");
        jTextFieldBranch2.setText("");
        jTextFieldBranch3.setText("");
        jTextFieldBranch4.setText("");
        jTextFieldBranch5.setText("");
        jTextFieldBranch6.setText("");
        jTextFieldBranch7.setText("");
        jTextFieldBranch8.setText("");
        jTextFieldBranch9.setText("");
        jTextFieldBranch10.setText("");
        jTextFieldBranch11.setText("");
    }                                                 

    private void jTextFieldSearchBranchFocusLost(java.awt.event.FocusEvent evt) {                                                 
        if (jTextFieldSearchBranch.getText().equals("")) {
            jTextFieldSearchBranch.setForeground(Color.lightGray);
            jTextFieldSearchBranch.setText(" mit Enter bestätigen...");
        }
    }                                               

    private void jTextFieldSearchBranchMouseClicked(java.awt.event.MouseEvent evt) {                                                   
        jTextFieldSearchBranch.setForeground(Color.BLACK);
        // TODO add your handling code here:
    }                                                   

    private void jTextFieldSearchBranchActionPerformed(java.awt.event.ActionEvent evt) {                                                       
        // TODO add your handling code here:
    }                                                     

    private void jTextFieldSearchBranchKeyReleased(java.awt.event.KeyEvent evt) {                                                   
        // TODO add your handling code here:
    }                                                 


    // Variables declaration - do not modify                     
    private javax.swing.JButton jButtonClearBranch;
    public javax.swing.JButton jButtonDeleteBranch;
    public javax.swing.JButton jButtonSaveBranch;
    public javax.swing.JButton jButtonUpdateBranch;
    private javax.swing.JLabel jLabeBranch5;
    private javax.swing.JLabel jLabelBranch1;
    private javax.swing.JLabel jLabelBranch10;
    private javax.swing.JLabel jLabelBranch11;
    private javax.swing.JLabel jLabelBranch2;
    private javax.swing.JLabel jLabelBranch3;
    private javax.swing.JLabel jLabelBranch4;
    private javax.swing.JLabel jLabelBranch6;
    private javax.swing.JLabel jLabelBranch7;
    private javax.swing.JLabel jLabelBranch8;
    private javax.swing.JLabel jLabelBranch9;
    private javax.swing.JLabel jLabelSearchBranch;
    private javax.swing.JScrollPane jScrollPaneBranch;
    private javax.swing.JSeparator jSeparatorBranch;
    public javax.swing.JTable jTableBranch;
    public javax.swing.JTextField jTextFieldBranch1;
    public javax.swing.JTextField jTextFieldBranch10;
    public javax.swing.JTextField jTextFieldBranch11;
    public javax.swing.JTextField jTextFieldBranch2;
    public javax.swing.JTextField jTextFieldBranch3;
    public javax.swing.JTextField jTextFieldBranch4;
    public javax.swing.JTextField jTextFieldBranch5;
    public javax.swing.JTextField jTextFieldBranch6;
    public javax.swing.JTextField jTextFieldBranch7;
    public javax.swing.JTextField jTextFieldBranch8;
    public javax.swing.JTextField jTextFieldBranch9;
    private javax.swing.JTextField jTextFieldSearchBranch;
    // End of variables declaration                   
}

Also grad bekomme ich wieder Nullpointer, ich bin mir bei den Übergabeparametern oder keine ziemlich unsicher. Z.B. wenn ich eine Filiale hinzufügen möchte, dann soll es ja nicht über die Selection ausgewählt werden, sondern ein komplett neues branch Object zu geordnet werden, wenn die id eine neue ist, also wenn schon dieselbe vorhanden ist soll es aktualisiert werden.
 

mihe7

Top Contributor
Das sieht doch grob betrachtet schon mal gar nicht schlecht aus.

Also grad bekomme ich wieder Nullpointer, ich bin mir bei den Übergabeparametern oder keine ziemlich unsicher. Z.B. wenn ich eine Filiale hinzufügen möchte, dann soll es ja nicht über die Selection ausgewählt werden, sondern ein komplett neues branch Object zu geordnet werden, wenn die id eine neue ist, also wenn schon dieselbe vorhanden ist soll es aktualisiert werden.
LOL - Du sprichst in Rätseln. Erstens wo bekommst Du Nullpointer (meinst Du null oder NPEs?). Mit dem Rest kann ich irgendwie nichts anfangen. Nur so viel: wenn Du ein neues Branch-Objekt willst, musst Du auch ein neues erzeugen (new).
 

maGG

Bekanntes Mitglied
Ich rede von npe. Wo die auftritt? K.a. der Stacktrace ist nicht eindeutig. Es stehen wieder alle Aufrufzeilen im Panel, Model und Repo Klasse.

Bei upadte z.B. soll man eine Filiale aktualisieren können. Aber wie wählt mab die Branch aus? Eigentlich müsste das über dir id gehen. Also wenn man eine id setzt, die schon vorhanden ist, dann soll die Branch durch die gesetzte id ausgewählt werden. Aber wie macht man das und sollte man das so machen? Alternativ könnte man auch über eine selection in der table arbeiten. Aber wie ich die Methode jetzte am besten schreibe weiß ich nicht.
 

mihe7

Top Contributor
Es stehen wieder alle Aufrufzeilen im Panel, Model und Repo Klasse.
Von oben die erste Zeile, die eine Deiner Klassen betrifft.

Also wenn man eine id setzt, die schon vorhanden ist, dann soll die Branch durch die gesetzte id ausgewählt werden. Aber wie macht man das und sollte man das so machen?
Du meinst ein Suchfeld? Kann man machen. Dann durchforstet man das TableModel, d. h. ermittelt den Index der betreffenden Zeile und setzt diesen als ausgewählt.
 

maGG

Bekanntes Mitglied
Von oben die erste Zeile, die eine Deiner Klassen betrifft.
Da steht das hier:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at org.sqlite.core.DB.prepare(DB.java:222)
    at org.sqlite.core.CorePreparedStatement.<init>(CorePreparedStatement.java:41)
    at org.sqlite.jdbc3.JDBC3PreparedStatement.<init>(JDBC3PreparedStatement.java:30)
    at org.sqlite.jdbc4.JDBC4PreparedStatement.<init>(JDBC4PreparedStatement.java:19)
    at org.sqlite.jdbc4.JDBC4Connection.prepareStatement(JDBC4Connection.java:48)
    at org.sqlite.jdbc3.JDBC3Connection.prepareStatement(JDBC3Connection.java:263)
    at org.sqlite.jdbc3.JDBC3Connection.prepareStatement(JDBC3Connection.java:235)
    at RepositoryClasses.BranchRepository.updateBranch(BranchRepository.java:102)
    at ModelClasses.BranchModel.update(BranchModel.java:64)
    at UserInterface.PanelBranches.update(PanelBranches.java:137)
    at UserInterface.PanelBranches.jButtonUpdateBranchActionPerformed(PanelBranches.java:433)
    at UserInterface.PanelBranches.access$000(PanelBranches.java:18)
    at UserInterface.PanelBranches$1.actionPerformed(PanelBranches.java:249)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6533)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6298)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

und in der ersten Zeile meiner Klasse steht das hier
Java:
try(PreparedStatement pst = conn.prepareStatement(sql)) {
Dieser Info bringt mir rein gar nix, der Fehler kann wieder an X verschiedenen Stellen sein.
Du meinst ein Suchfeld? Kann man machen. Dann durchforstet man das TableModel, d. h. ermittelt den Index der betreffenden Zeile und setzt diesen als ausgewählt.
Keine Ahnung wie du das meinst o_O
 
Zuletzt bearbeitet:

maGG

Bekanntes Mitglied
Im Moment ist es so: Wenn ich versuche eine Filiale zu aktualisieren mit update, dann kommt der Fehler, die JTable wird nicht aktualisiert und wenn man dann auf die JTable klickt (da wird ja dann setCurrent aufgerufen) wird die aktualisierte Filiale bzw. die aktualisierte Tabelle angezeigt. Macht sinn ... nicht!

edit: Ich glaube, dass die bisherige Struktur in Panel, Model und Repository zu mindest für Update keinen Sinn macht bzw. angepasst werden muss. Der SQL Befehl in der Repository sieht kein Branch Objekt vor. Wenn ich jetzt Branch Objekte benutze muss ich allein über die id ein neues Branch Objekt erzeugen, welches ich dann in die Methoden einsetzen kann (keine Ahnung wie das geht). Oder ich muss mich von der Idee verabschieden mit Branch Objekten zu arbeiten, dann ist aber die gesamte Struktur hinfällig.

Also um zu verdeutlichen was ich meine:
Java:
    private void jButtonUpdateBranchActionPerformed(java.awt.event.ActionEvent evt) {                                                   
        int id = Integer.parseInt(jTextFieldBranch1.getText());
        //   "get branch where id = ? (schematisch)
        update(branch);
    }
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Macht sinn ... nicht!
Doch, da Du ggf. das selbe Objekt bearbeitest, das in der Tabelle steckt. D. h. selbst ohne update würden Dir die Änderungen in der Tabelle angezeigt, sobald die betreffende Zeile neu gezeichnet wird.

Du musst einfach nur ein neues Branch-Objekt erzeugen, dieses mit den Inhalten der Eingaben füllen (inkl. ID) und dann die Update-Methode im Model aufrufen.

Der SQL Befehl in der Repository sieht kein Branch Objekt vor.
Wie meinst Du das?!? Das SQL-Befehl kennt keine Objekte.

Möglicherweise wurden von den Betreibern des Forums ungekennzeichnete Werbetexte in meinen Beitrag eingefügt, die nicht als solche erkennbar sind. Das können beispielsweise Kursempfehlungen sein. Ich distanziere mich davon und empfehle, solchen Links nicht zu folgen.
 

maGG

Bekanntes Mitglied
Es sieht jetzt so aus:
Java:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package UserInterface;

import java.awt.Color;
import ObjectClasses.Branch;
import ObjectClasses.Branch.Location;
import ModelClasses.BranchModel;
import RepositoryClasses.BranchRepository;
import javax.swing.JOptionPane;

/**
 *
 * @author david
 */
public class PanelBranches extends javax.swing.JPanel {

    /**
     * Creates new form BranchesDomestic
     */
    
    public PanelBranches() {
        initComponents();
    }
    
    public PanelBranches(BranchRepository branchRepos, Location location) {
        this.branchRepos = branchRepos;
        branchModel = new BranchModel(branchRepos, location);
        initComponents();       
        adjustAppearance();
        tableListener();
        // Model wird in initComponents gesetzt
        // jTableBranch.setModel(branchModel);
    }

    BranchModel branchModel = null;
    BranchRepository branchRepos = null;
    private Branch branch, current = null;
    private int id, vorwahl, telEndDefault;
    private long telStartNum;
    private String label, strasze, plzOrt, ort, telStartTxt, faxStartTxt, faxEndTxt;   
 
    private void adjustAppearance() {
        setBackground(new Color(0,0,0,0));
        jTableBranch.getTableHeader().setOpaque(false);
        jTableBranch.getTableHeader().setBackground(new Color(128, 128, 128));
        jTableBranch.getTableHeader().setForeground(Color.WHITE);
    }

    private void initVariables() {
        id = Integer.parseInt(jTextFieldBranch1.getText());
        label = jTextFieldBranch2.getText();
        strasze = jTextFieldBranch3.getText();
        plzOrt = jTextFieldBranch4.getText();
        ort = jTextFieldBranch5.getText();
        vorwahl= Integer.parseInt(jTextFieldBranch6.getText());
        telStartNum = Long.parseLong(jTextFieldBranch7.getText());
        telStartTxt = jTextFieldBranch8.getText();
        telEndDefault = Integer.parseInt(jTextFieldBranch9.getText());
        faxStartTxt = jTextFieldBranch10.getText();
        faxEndTxt = jTextFieldBranch11.getText();     
    }
    
    private void setCaretPositions() {
        jTextFieldBranch1.setCaretPosition(0);
        jTextFieldBranch2.setCaretPosition(0);
        jTextFieldBranch3.setCaretPosition(0);
        jTextFieldBranch4.setCaretPosition(0);     
        jTextFieldBranch5.setCaretPosition(0);
        jTextFieldBranch6.setCaretPosition(0);
        jTextFieldBranch7.setCaretPosition(0);
        jTextFieldBranch8.setCaretPosition(0);
        jTextFieldBranch9.setCaretPosition(0);
        jTextFieldBranch10.setCaretPosition(0);
        jTextFieldBranch11.setCaretPosition(0);
    }
    
    private void tableListener() {
        jTableBranch.setRowSelectionAllowed(true);
        jTableBranch.getSelectionModel().addListSelectionListener(e -> {
            if (e.getValueIsAdjusting()) {
                return;
            }
            int row = jTableBranch.getSelectedRow();
            branch = branchModel.getElementAt(row);
            setCurrent(branch);
            setCaretPositions();
        });   
    }
    
    private void setCurrent(Branch branch) {
        this.current = branch;
        boolean valid = current != null;
        if (valid) {
            jTextFieldBranch1.setText("" + current.getId());
            jTextFieldBranch2.setText(current.getLabel());
            jTextFieldBranch3.setText(current.getStrasze());
            jTextFieldBranch4.setText(current.getPlzort());       
            jTextFieldBranch5.setText(current.getOrt());
            jTextFieldBranch6.setText("" + current.getVorwahl());
            jTextFieldBranch7.setText("" + current.getTelStartNum());
            jTextFieldBranch8.setText(current.getTelStartTxt());
            jTextFieldBranch9.setText("" + current.getTelEndDefault());
            jTextFieldBranch10.setText(current.getFaxStartTxt());
            jTextFieldBranch11.setText(current.getFaxEndTxt());
        } else {
            jTextFieldBranch1.setText("");
            jTextFieldBranch2.setText("");
            jTextFieldBranch3.setText("");
            jTextFieldBranch4.setText("");       
            jTextFieldBranch5.setText("");
            jTextFieldBranch8.setText("");
            jTextFieldBranch6.setText("");
            jTextFieldBranch9.setText("");
            jTextFieldBranch10.setText("");
            jTextFieldBranch11.setText("");
        }
        jTextFieldBranch1.setEnabled(valid);
        jTextFieldBranch2.setEnabled(valid);
        jTextFieldBranch3.setEnabled(valid);
        jTextFieldBranch4.setEnabled(valid);     
        jTextFieldBranch5.setEnabled(valid);
        jTextFieldBranch8.setEnabled(valid);
        jTextFieldBranch6.setEnabled(valid);
        jTextFieldBranch7.setEnabled(valid);
        jTextFieldBranch9.setEnabled(valid);
        jTextFieldBranch10.setEnabled(valid);
        jTextFieldBranch11.setEnabled(valid);
        jButtonUpdateBranch.setEnabled(valid);
        jButtonSaveBranch.setEnabled(valid);
        jButtonDeleteBranch.setEnabled(valid);   
    }
    
    private void update(Branch branch) {
        this.current = branch;
        if(this.current == null) {
            return;
        }             
        current.setId(Integer.parseInt(jTextFieldBranch1.getText()));
        current.setLabel(jTextFieldBranch2.getText());
        current.setStrasze(jTextFieldBranch3.getText());
        current.setPlzort(jTextFieldBranch4.getText());
        current.setOrt(jTextFieldBranch5.getText());
        current.setVorwahl(Integer.parseInt(jTextFieldBranch6.getText()));
        current.setTelStartNum(Long.parseLong(jTextFieldBranch7.getText()));
        current.setTelStartTxt(jTextFieldBranch8.getText());
        current.setTelEndDefault(Integer.parseInt(jTextFieldBranch9.getText()));
        current.setFaxStartTxt(jTextFieldBranch10.getText());
        current.setFaxEndTxt(jTextFieldBranch11.getText());
        branchModel.update(current);
    }
    
    private void save(Branch branch) {
        this.current = branch;       
        if (this.current == null) {
            return;
        }
        current.setId(Integer.parseInt(jTextFieldBranch1.getText()));
        current.setLabel(jTextFieldBranch2.getText());
        current.setStrasze(jTextFieldBranch3.getText());
        current.setPlzort(jTextFieldBranch4.getText());
        current.setOrt(jTextFieldBranch5.getText());
        current.setVorwahl(Integer.parseInt(jTextFieldBranch6.getText()));
        current.setTelStartNum(Long.parseLong(jTextFieldBranch7.getText()));
        current.setTelStartTxt(jTextFieldBranch8.getText());
        current.setTelEndDefault(Integer.parseInt(jTextFieldBranch9.getText()));
        current.setFaxStartTxt(jTextFieldBranch10.getText());
        current.setFaxEndTxt(jTextFieldBranch11.getText());
        branchModel.add(current);
    }     
    
    private void delete(Branch branch) {
        this.current = branch;
        if(this.current == null) {
            return;
        }
        branchModel.delete(branch);       
    }
    
    private void search() {
        if(this.current == null) {
            return;
        }
        // do something
    }
    
    /**
     * 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() {

        jTextFieldBranch1 = new javax.swing.JTextField();
        jTextFieldBranch2 = new javax.swing.JTextField();
        jTextFieldBranch3 = new javax.swing.JTextField();
        jTextFieldBranch4 = new javax.swing.JTextField();
        jTextFieldBranch5 = new javax.swing.JTextField();
        jTextFieldBranch6 = new javax.swing.JTextField();
        jTextFieldBranch7 = new javax.swing.JTextField();
        jTextFieldBranch8 = new javax.swing.JTextField();
        jTextFieldBranch9 = new javax.swing.JTextField();
        jTextFieldBranch10 = new javax.swing.JTextField();
        jTextFieldBranch11 = new javax.swing.JTextField();
        jLabelBranch1 = new javax.swing.JLabel();
        jLabelBranch2 = new javax.swing.JLabel();
        jLabelBranch3 = new javax.swing.JLabel();
        jLabelBranch4 = new javax.swing.JLabel();
        jLabeBranch5 = new javax.swing.JLabel();
        jLabelBranch6 = new javax.swing.JLabel();
        jLabelBranch7 = new javax.swing.JLabel();
        jLabelBranch8 = new javax.swing.JLabel();
        jLabelBranch9 = new javax.swing.JLabel();
        jLabelBranch10 = new javax.swing.JLabel();
        jLabelBranch11 = new javax.swing.JLabel();
        jScrollPaneBranch = new javax.swing.JScrollPane();
        jTableBranch = new javax.swing.JTable();
        jButtonUpdateBranch = new javax.swing.JButton();
        jButtonSaveBranch = new javax.swing.JButton();
        jButtonDeleteBranch = new javax.swing.JButton();
        jButtonClearBranch = new javax.swing.JButton();
        jTextFieldSearchBranch = new javax.swing.JTextField();
        jLabelSearchBranch = new javax.swing.JLabel();
        jSeparatorBranch = new javax.swing.JSeparator();

        setPreferredSize(new java.awt.Dimension(1077, 479));

        jLabelBranch1.setText("id:");

        jLabelBranch2.setText("LABEL:");

        jLabelBranch3.setText("STRASZE:");

        jLabelBranch4.setText("PLZ_ORT:");

        jLabeBranch5.setText("ORT (E-Mail):");

        jLabelBranch6.setText("TEL_LAND:");

        jLabelBranch7.setText("TEL_ANFANG_INT:");

        jLabelBranch8.setText("TEL_ANFANG_TXT:");

        jLabelBranch9.setText("TEL_ENDE_DEFAULT:");

        jLabelBranch10.setText("FAX_ANFANG_TXT:");

        jLabelBranch11.setText("FAX_ENDE_TXT:");

        jTableBranch.setModel(branchModel);
        jTableBranch.setOpaque(false);
        jTableBranch.setRowHeight(20);
        jTableBranch.getTableHeader().setResizingAllowed(false);
        jTableBranch.getTableHeader().setReorderingAllowed(false);
        jScrollPaneBranch.setViewportView(jTableBranch);

        jButtonUpdateBranch.setIcon(new javax.swing.ImageIcon("C:\\Users\\david\\Documents\\Actions-view-refresh-icon.png")); // NOI18N
        jButtonUpdateBranch.setText("Aktualisieren");
        jButtonUpdateBranch.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonUpdateBranchActionPerformed(evt);
            }
        });

        jButtonSaveBranch.setIcon(new javax.swing.ImageIcon("C:\\Users\\david\\Documents\\Database-Add-icon.png")); // NOI18N
        jButtonSaveBranch.setText("Hinzufügen");
        jButtonSaveBranch.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonSaveBranchActionPerformed(evt);
            }
        });

        jButtonDeleteBranch.setIcon(new javax.swing.ImageIcon("C:\\Users\\david\\Documents\\Actions-edit-delete-icon.png")); // NOI18N
        jButtonDeleteBranch.setText("Löschen");
        jButtonDeleteBranch.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonDeleteBranchActionPerformed(evt);
            }
        });

        jButtonClearBranch.setIcon(new javax.swing.ImageIcon("C:\\Users\\david\\Documents\\Actions-edit-clear-icon.png")); // NOI18N
        jButtonClearBranch.setText("Felder leeren");
        jButtonClearBranch.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonClearBranchActionPerformed(evt);
            }
        });

        jTextFieldSearchBranch.setForeground(java.awt.Color.lightGray);
        jTextFieldSearchBranch.setText(" mit Enter bestätigen...");
        jTextFieldSearchBranch.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                jTextFieldSearchBranchFocusLost(evt);
            }
        });
        jTextFieldSearchBranch.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTextFieldSearchBranchMouseClicked(evt);
            }
        });
        jTextFieldSearchBranch.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextFieldSearchBranchActionPerformed(evt);
            }
        });
        jTextFieldSearchBranch.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jTextFieldSearchBranchKeyReleased(evt);
            }
        });

        jLabelSearchBranch.setText("Suche:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabelBranch11)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabelBranch10)
                                .addGap(27, 27, 27)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jTextFieldBranch11, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch10, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabelBranch9)
                                    .addComponent(jLabelBranch8)
                                    .addComponent(jLabelBranch7)
                                    .addComponent(jLabelBranch6)
                                    .addComponent(jLabeBranch5)
                                    .addComponent(jLabelBranch4)
                                    .addComponent(jLabelBranch3)
                                    .addComponent(jLabelBranch2)
                                    .addComponent(jLabelBranch1))
                                .addGap(18, 18, 18)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jTextFieldBranch1, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch2, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch3, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch4, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch5, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch6, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch7, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch8, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jTextFieldBranch9, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                .addGroup(layout.createSequentialGroup()
                                    .addComponent(jLabelSearchBranch)
                                    .addGap(18, 18, 18)
                                    .addComponent(jTextFieldSearchBranch))
                                .addComponent(jSeparatorBranch, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 251, javax.swing.GroupLayout.PREFERRED_SIZE))))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(78, 78, 78)
                        .addComponent(jButtonClearBranch)))
                .addGap(24, 24, 24)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPaneBranch, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButtonUpdateBranch)
                        .addGap(18, 18, 18)
                        .addComponent(jButtonSaveBranch)
                        .addGap(18, 18, 18)
                        .addComponent(jButtonDeleteBranch)
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jScrollPaneBranch, javax.swing.GroupLayout.PREFERRED_SIZE, 409, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(14, 14, 14)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jButtonUpdateBranch)
                            .addComponent(jButtonSaveBranch)
                            .addComponent(jButtonDeleteBranch))
                        .addGap(20, 20, 20))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldSearchBranch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelSearchBranch))
                        .addGap(10, 10, 10)
                        .addComponent(jSeparatorBranch, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(2, 2, 2)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch1))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch2))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch3))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch4))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabeBranch5))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch6))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch7))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch8))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch9))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch10))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jTextFieldBranch11, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabelBranch11))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jButtonClearBranch)
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
        );
    }// </editor-fold>                       

    private void jButtonUpdateBranchActionPerformed(java.awt.event.ActionEvent evt) {                                                   
        int row = jTableBranch.getSelectedRow();
        branch = branchModel.getElementAt(row);
        update(branch);
    }                                                   

    private void jButtonSaveBranchActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        initVariables();
        branch = new Branch(id, label, strasze, plzOrt, ort, vorwahl, telStartNum, telStartTxt, telEndDefault, faxStartTxt, faxEndTxt);
        save(branch);
    }                                                 

    private void jButtonDeleteBranchActionPerformed(java.awt.event.ActionEvent evt) {                                                   
        int row = jTableBranch.getSelectedRow();
        branch = branchModel.getElementAt(row);
        if (JOptionPane.showConfirmDialog(null, "Filiale wirklich löschen?", "Filiale löschen",JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION){
            delete(branch);
        }
    }                                                   

    private void jButtonClearBranchActionPerformed(java.awt.event.ActionEvent evt) {                                                   
        jTextFieldBranch1.setText("");
        jTextFieldBranch2.setText("");
        jTextFieldBranch3.setText("");
        jTextFieldBranch4.setText("");
        jTextFieldBranch5.setText("");
        jTextFieldBranch6.setText("");
        jTextFieldBranch7.setText("");
        jTextFieldBranch8.setText("");
        jTextFieldBranch9.setText("");
        jTextFieldBranch10.setText("");
        jTextFieldBranch11.setText("");
    }                                                 

    private void jTextFieldSearchBranchFocusLost(java.awt.event.FocusEvent evt) {                                                 
        if (jTextFieldSearchBranch.getText().equals("")) {
            jTextFieldSearchBranch.setForeground(Color.lightGray);
            jTextFieldSearchBranch.setText(" mit Enter bestätigen...");
        }
    }                                               

    private void jTextFieldSearchBranchMouseClicked(java.awt.event.MouseEvent evt) {                                                   
        jTextFieldSearchBranch.setForeground(Color.BLACK);
        // TODO add your handling code here:
    }                                                   

    private void jTextFieldSearchBranchActionPerformed(java.awt.event.ActionEvent evt) {                                                       
        // TODO add your handling code here:
    }                                                     

    private void jTextFieldSearchBranchKeyReleased(java.awt.event.KeyEvent evt) {                                                   
        // TODO add your handling code here:
    }                                                 


    // Variables declaration - do not modify                     
    private javax.swing.JButton jButtonClearBranch;
    public javax.swing.JButton jButtonDeleteBranch;
    public javax.swing.JButton jButtonSaveBranch;
    public javax.swing.JButton jButtonUpdateBranch;
    private javax.swing.JLabel jLabeBranch5;
    private javax.swing.JLabel jLabelBranch1;
    private javax.swing.JLabel jLabelBranch10;
    private javax.swing.JLabel jLabelBranch11;
    private javax.swing.JLabel jLabelBranch2;
    private javax.swing.JLabel jLabelBranch3;
    private javax.swing.JLabel jLabelBranch4;
    private javax.swing.JLabel jLabelBranch6;
    private javax.swing.JLabel jLabelBranch7;
    private javax.swing.JLabel jLabelBranch8;
    private javax.swing.JLabel jLabelBranch9;
    private javax.swing.JLabel jLabelSearchBranch;
    private javax.swing.JScrollPane jScrollPaneBranch;
    private javax.swing.JSeparator jSeparatorBranch;
    public javax.swing.JTable jTableBranch;
    public javax.swing.JTextField jTextFieldBranch1;
    public javax.swing.JTextField jTextFieldBranch10;
    public javax.swing.JTextField jTextFieldBranch11;
    public javax.swing.JTextField jTextFieldBranch2;
    public javax.swing.JTextField jTextFieldBranch3;
    public javax.swing.JTextField jTextFieldBranch4;
    public javax.swing.JTextField jTextFieldBranch5;
    public javax.swing.JTextField jTextFieldBranch6;
    public javax.swing.JTextField jTextFieldBranch7;
    public javax.swing.JTextField jTextFieldBranch8;
    public javax.swing.JTextField jTextFieldBranch9;
    private javax.swing.JTextField jTextFieldSearchBranch;
    // End of variables declaration                   
}
Habe ein paar Sachen geändert und eine Delete Methode in Repository und Model geschrieben. Im Moment bekomme ich wieder NullpointerExceptions bei allen drei Methoden (Update, Add und Delete). Irgendwas stimmt bei dieser Struktur überhaupt nicht und muss komplett falsch sein. Sonst kann ich mir nicht erklären wieso immer wieder NPEs kommen.
 

mihe7

Top Contributor
Im Moment bekomme ich wieder NullpointerExceptions
Stracktrace?

Möglicherweise wurden von den Betreibern des Forums ungekennzeichnete Werbetexte in meinen Beitrag eingefügt, die nicht als solche erkennbar sind. Das können beispielsweise Kursempfehlungen sein. Ich distanziere mich davon und empfehle, solchen Links nicht zu folgen.
 
X

Xyz1

Gast
@maGG was möchtest Du denn machen? Das Thema ist jetzt nicht gerade kurz...

@mihe7 Was ist mit unseren "Beschwerde" Thema passiert??:(

Möglicherweise wurden von den Betreibern des Forums ungekennzeichnete Werbetexte in meinen Beitrag eingefügt, die nicht als solche erkennbar sind. Das können beispielsweise Kursempfehlungen sein. Ich distanziere mich davon und empfehle, solchen Links nicht zu folgen.
 

Ähnliche Java Themen

Neue Themen


Oben