Inhalt
Aktueller Ordner:
duesseldorfer-schuelerinventar-java-client/src/main/java/com/dueskGroupManagerDialog.java
package com.duesk;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import com.duesk.api.ApiClient;
import com.duesk.api.models.Group;
public class GroupManagerDialog extends JDialog {
private List<Group> groups = new ArrayList<>();
private GroupTableModel tableModel;
private JTextField newGroupField;
public GroupManagerDialog(JFrame parent) {
super(parent, "Gruppenverwaltung", true);
setSize(500, 400);
setLocationRelativeTo(parent);
initComponents();
loadGroups();
}
private void initComponents() {
setLayout(new BorderLayout());
// Oberer Bereich
JPanel topPanel = new JPanel(new FlowLayout());
topPanel.add(new JLabel("Neue Gruppe:"));
newGroupField = new JTextField(20);
topPanel.add(newGroupField);
JButton addBtn = new JButton("Hinzufügen");
addBtn.addActionListener(e -> addGroup());
topPanel.add(addBtn);
add(topPanel, BorderLayout.NORTH);
// Tabelle
tableModel = new GroupTableModel();
JTable groupTable = new JTable(tableModel);
add(new JScrollPane(groupTable), BorderLayout.CENTER);
// Unterer Bereich
JPanel bottomPanel = new JPanel();
JButton deleteBtn = new JButton("Löschen");
deleteBtn.addActionListener(e -> deleteGroup());
JButton closeBtn = new JButton("Schließen");
closeBtn.addActionListener(e -> dispose());
bottomPanel.add(deleteBtn);
bottomPanel.add(closeBtn);
add(bottomPanel, BorderLayout.SOUTH);
}
private void loadGroups() {
SwingWorker<List<Group>, Void> worker = new SwingWorker<List<Group>, Void>() {
@Override
protected List<Group> doInBackground() throws Exception {
return ApiClient.getGroups();
}
@Override
protected void done() {
try {
groups = get();
if (groups != null) {
tableModel.setGroups(groups);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(GroupManagerDialog.this,
"Fehler beim Laden: " + e.getMessage());
}
}
};
worker.execute();
}
private void addGroup() {
String name = newGroupField.getText().trim();
if (name.isEmpty()) {
JOptionPane.showMessageDialog(this, "Bitte Gruppennamen eingeben!");
return;
}
SwingWorker<Boolean, Void> worker = new SwingWorker<Boolean, Void>() {
@Override
protected Boolean doInBackground() throws Exception {
return ApiClient.createGroup(name);
}
@Override
protected void done() {
try {
if (get()) {
newGroupField.setText("");
loadGroups();
} else {
JOptionPane.showMessageDialog(GroupManagerDialog.this,
"Fehler beim Erstellen der Gruppe");
}
} catch (Exception e) {
JOptionPane.showMessageDialog(GroupManagerDialog.this,
"Fehler: " + e.getMessage());
}
}
};
worker.execute();
}
private void deleteGroup() {
int selectedRow = tableModel.getSelectedRow();
if (selectedRow >= 0 && selectedRow < groups.size()) {
Group group = groups.get(selectedRow);
int confirm = JOptionPane.showConfirmDialog(this,
"Möchten Sie die Gruppe '" + group.getName() + "' wirklich löschen?",
"Gruppe löschen", JOptionPane.YES_NO_OPTION);
if (confirm == JOptionPane.YES_OPTION) {
SwingWorker<Boolean, Void> worker = new SwingWorker<Boolean, Void>() {
@Override
protected Boolean doInBackground() throws Exception {
return ApiClient.deleteGroup(group.getGroupId());
}
@Override
protected void done() {
try {
if (get()) {
loadGroups();
} else {
JOptionPane.showMessageDialog(GroupManagerDialog.this,
"Fehler beim Löschen der Gruppe");
}
} catch (Exception e) {
JOptionPane.showMessageDialog(GroupManagerDialog.this,
"Fehler: " + e.getMessage());
}
}
};
worker.execute();
}
} else {
JOptionPane.showMessageDialog(this, "Bitte wählen Sie eine Gruppe aus.");
}
}
private class GroupTableModel extends AbstractTableModel {
private final String[] columns = {"Gruppenname"};
private List<Group> data = new ArrayList<>();
private int selectedRow = -1;
public void setGroups(List<Group> groups) {
this.data = groups;
fireTableDataChanged();
}
public void setSelectedRow(int row) { this.selectedRow = row; }
public int getSelectedRow() { return selectedRow; }
@Override
public int getRowCount() { return data.size(); }
@Override
public int getColumnCount() { return 1; }
@Override
public String getColumnName(int col) { return columns[col]; }
@Override
public Object getValueAt(int row, int col) {
return data.get(row).getName();
}
}
}