215 lines
8.9 KiB
Java
215 lines
8.9 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);
|
|
} 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<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()
|
|
});
|
|
}
|
|
}
|
|
} |