SE1_Team_3/src/main/java/ui/KundenPanel.java

211 lines
8.6 KiB
Java

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);
}
}
});
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<Kunde> 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<Kunde> 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()
});
}
}
}