package ui; import kundenverwaltung.Kunde; import kundenverwaltung.KundenServiceImpl; import javax.swing.*; import javax.swing.table.*; import java.awt.*; import java.io.IOException; import java.util.List; public class KundenPanel extends JPanel { private KundenServiceImpl service; private JTable tabelle; private DefaultTableModel tabellenModell; private JTextField suchfeld; public KundenPanel() { try { service = new KundenServiceImpl(); } catch (IOException e) { e.printStackTrace(); } setLayout(new BorderLayout(10, 10)); setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15)); setBackground(new Color(244, 247, 255)); add(erstelleKopf(), BorderLayout.NORTH); add(erstelleTabelle(), BorderLayout.CENTER); add(erstelleFormular(), BorderLayout.EAST); add(erstelleAktionen(), BorderLayout.SOUTH); } private JPanel erstelleKopf() { JPanel kopf = new JPanel(new BorderLayout()); kopf.setBackground(new Color(244, 247, 255)); JLabel titel = new JLabel("Kundenverwaltung"); titel.setFont(new Font("Cambria", Font.BOLD, 20)); titel.setForeground(new Color(30, 39, 97)); kopf.add(titel, BorderLayout.WEST); JPanel suchPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); suchPanel.setBackground(new Color(244, 247, 255)); suchfeld = new JTextField(15); JButton suchenBtn = erstelleButton("Suchen", new Color(74, 144, 217)); suchenBtn.addActionListener(e -> sucheKunden()); JButton alleBtn = erstelleButton("Alle anzeigen", new Color(30, 39, 97)); alleBtn.addActionListener(e -> ladeKunden()); suchPanel.add(new JLabel("Suche: ")); suchPanel.add(suchfeld); suchPanel.add(suchenBtn); suchPanel.add(alleBtn); kopf.add(suchPanel, BorderLayout.EAST); return kopf; } private JScrollPane erstelleTabelle() { String[] spalten = {"Kunden-ID", "Name", "PLZ", "Ort", "E-Mail", "Telefon"}; tabellenModell = new DefaultTableModel(spalten, 0) { public boolean isCellEditable(int r, int c) { return false; } }; tabelle = new JTable(tabellenModell); tabelle.setRowHeight(28); tabelle.setFont(new Font("Calibri", Font.PLAIN, 13)); tabelle.getTableHeader().setFont(new Font("Calibri", Font.BOLD, 13)); tabelle.getTableHeader().setBackground(new Color(30, 39, 97)); tabelle.getTableHeader().setForeground(Color.WHITE); tabelle.setSelectionBackground(new Color(202, 220, 252)); tabelle.setGridColor(new Color(209, 217, 240)); ladeKunden(); return new JScrollPane(tabelle); } private JPanel erstelleFormular() { JPanel form = new JPanel(); form.setLayout(new BoxLayout(form, BoxLayout.Y_AXIS)); form.setBackground(Color.WHITE); form.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createLineBorder(new Color(202, 220, 252)), BorderFactory.createEmptyBorder(15, 15, 15, 15) )); form.setPreferredSize(new Dimension(280, 0)); JLabel formTitel = new JLabel("Neuen Kunden anlegen"); formTitel.setFont(new Font("Cambria", Font.BOLD, 14)); formTitel.setForeground(new Color(30, 39, 97)); formTitel.setAlignmentX(Component.LEFT_ALIGNMENT); form.add(formTitel); form.add(Box.createVerticalStrut(15)); JTextField nameField = erstelleFeld(form, "Name / Firmenname *"); JTextField strasseField = erstelleFeld(form, "Strasse *"); JTextField plzField = erstelleFeld(form, "PLZ *"); JTextField ortField = erstelleFeld(form, "Ort *"); JTextField steuerField = erstelleFeld(form, "Steuernummer *"); JTextField emailField = erstelleFeld(form, "E-Mail *"); JTextField telefonField = erstelleFeld(form, "Telefon *"); form.add(Box.createVerticalStrut(15)); JButton speichernBtn = erstelleButton("Speichern", new Color(30, 39, 97)); speichernBtn.setAlignmentX(Component.LEFT_ALIGNMENT); speichernBtn.setMaximumSize(new Dimension(Integer.MAX_VALUE, 35)); speichernBtn.addActionListener(e -> { if (nameField.getText().isBlank() || strasseField.getText().isBlank() || plzField.getText().isBlank() || ortField.getText().isBlank() || steuerField.getText().isBlank() || emailField.getText().isBlank() || telefonField.getText().isBlank()) { JOptionPane.showMessageDialog(this, "Bitte füllen Sie alle Pflichtfelder aus.", "Pflichtfeld fehlt", JOptionPane.WARNING_MESSAGE); return; } service.kundeAnlegen(nameField.getText(), strasseField.getText(), plzField.getText(), ortField.getText(), steuerField.getText(), emailField.getText(), telefonField.getText()); nameField.setText(""); strasseField.setText(""); plzField.setText(""); ortField.setText(""); steuerField.setText(""); emailField.setText(""); telefonField.setText(""); ladeKunden(); JOptionPane.showMessageDialog(this, "Kunde wurde erfolgreich gespeichert.", "Erfolg", JOptionPane.INFORMATION_MESSAGE); }); form.add(speichernBtn); return form; } private JPanel erstelleAktionen() { JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 10)); panel.setBackground(Color.WHITE); panel.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createLineBorder(new Color(202, 220, 252)), BorderFactory.createEmptyBorder(5, 10, 5, 10) )); JButton loeschenBtn = erstelleButton("Ausgewaehlten Kunden loeschen", new Color(180, 50, 50)); loeschenBtn.addActionListener(e -> { int zeile = tabelle.getSelectedRow(); if (zeile == -1) { JOptionPane.showMessageDialog(this, "Bitte waehlen Sie einen Kunden aus.", "Kein Kunde ausgewaehlt", JOptionPane.WARNING_MESSAGE); return; } String kundenId = (String) tabellenModell.getValueAt(zeile, 0); int bestaetigung = JOptionPane.showConfirmDialog(this, "Moechten Sie den Kunden " + kundenId + " wirklich loeschen?", "Loeschen bestaetigen", JOptionPane.YES_NO_OPTION); if (bestaetigung == JOptionPane.YES_OPTION) { boolean ok = service.kundeLoschen(kundenId); if (ok) { ladeKunden(); JOptionPane.showMessageDialog(this, "Kunde wurde erfolgreich geloescht.", "Erfolg", JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(this, "Kunde kann nicht geloescht werden, da er in einem Beleg referenziert wird.", "Loeschen nicht moeglich", JOptionPane.ERROR_MESSAGE); } } }); panel.add(loeschenBtn); return panel; } private JTextField erstelleFeld(JPanel panel, String label) { JLabel lbl = new JLabel(label); lbl.setFont(new Font("Calibri", Font.PLAIN, 12)); lbl.setAlignmentX(Component.LEFT_ALIGNMENT); panel.add(lbl); panel.add(Box.createVerticalStrut(3)); JTextField feld = new JTextField(); feld.setMaximumSize(new Dimension(Integer.MAX_VALUE, 30)); feld.setAlignmentX(Component.LEFT_ALIGNMENT); panel.add(feld); panel.add(Box.createVerticalStrut(8)); return feld; } private JButton erstelleButton(String text, Color farbe) { JButton btn = new JButton(text); btn.setBackground(farbe); btn.setForeground(Color.WHITE); btn.setFocusPainted(false); btn.setBorderPainted(false); btn.setFont(new Font("Calibri", Font.BOLD, 12)); btn.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); return btn; } private void ladeKunden() { tabellenModell.setRowCount(0); if (service == null) return; List kunden = service.alleKunden(); for (Kunde k : kunden) { tabellenModell.addRow(new Object[]{ k.getKundenId(), k.getName(), k.getPlz(), k.getOrt(), k.getEmail(), k.getTelefon() }); } } private void sucheKunden() { tabellenModell.setRowCount(0); if (service == null) return; List kunden = service.sucheNachName(suchfeld.getText()); for (Kunde k : kunden) { tabellenModell.addRow(new Object[]{ k.getKundenId(), k.getName(), k.getPlz(), k.getOrt(), k.getEmail(), k.getTelefon() }); } } }