Hallo liebes Forum,
Die letzten Tage habe ich damit verbracht zu lernen, wie man eine GUI die auf eine Datenbank zugreift am besten programmiert.
Im wesentlichen gibt es drei Ebenen:
Ich habe dazu ein kleines Beispiel programmiert.
Die GUI besteht aus einem JTextField, JButton und einem JLabel. Je nach dem, was in dem TextField eingeben wird ändert sich der Text des JLabels. (Ich weiß etwas unkreativ
)
Hier der Code der GUI:
Die "Familie" GuiData die ich als Schnittstelle nutze.
Meine Logik zum auswerten
Zuguterletzt die "Datenbank"
Jetzt zu meinen Fragen:
Ich danke schon mal für eure Antworten
Viele Grüße,
Meeresgott
Edit:
Vielleicht ist es noch wichtig zu wissen, dass ich nach einem Muster/Konzept oder ähnliches suche, was ich bei einer recht komplexen GUI anwenden kann, dass nicht stark anfällig für Veränderungen ist.
Die letzten Tage habe ich damit verbracht zu lernen, wie man eine GUI die auf eine Datenbank zugreift am besten programmiert.
Im wesentlichen gibt es drei Ebenen:
- Die Gui selber
- Eine Logik, die die Daten der Gui auswertet
- Die Datenbank
Ich habe dazu ein kleines Beispiel programmiert.
Die GUI besteht aus einem JTextField, JButton und einem JLabel. Je nach dem, was in dem TextField eingeben wird ändert sich der Text des JLabels. (Ich weiß etwas unkreativ
Hier der Code der GUI:
Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
/**
*
* GUI.java
*/
public class GUI
{
private JFrame frame;
private JButton button;
private JTextField textField;
private JLabel label;
private boolean guiEvent = false;
private GuiData guiData = null;
public void buildGUI()
{
frame = new JFrame();
frame.setTitle("GUI - Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
label = new JLabel("This is a Text");
frame.add(BorderLayout.NORTH,label);
textField = new JTextField(20);
frame.add(BorderLayout.CENTER,textField);
button = new JButton("Rename");
button.addActionListener(new RenameActionListener());
frame.add(BorderLayout.SOUTH,button);
frame.pack();
}
public void showGUI()
{
frame.setVisible(true);
}
public void waitOfUserEvent()
{
while(!guiEvent){
try {
TimeUnit.MILLISECONDS.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public GuiData getUserEvent()
{
return guiData;
}
public void setUserEvent(GuiData data)
{
if(data instanceof ButtonEventAnswer)
{
ButtonEventAnswer bea = (ButtonEventAnswer) data;
label.setText(bea.getTitle());
textField.setText("");
}
guiEvent = false;
}
public class RenameActionListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
ButtonEvent event = new ButtonEvent();
event.setText(textField.getText());
guiData = event;
guiEvent = true;
}
}
}
Die "Familie" GuiData die ich als Schnittstelle nutze.
Java:
interface GuiData {}
Java:
public class ButtonEvent implements GuiData
{
String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
Java:
public class ButtonEventAnswer implements GuiData
{
String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
Java:
public class GuiExample {
public static void main(String[] args)
{
Database base = new Database();
base.init();
GUI gui = new GUI();
gui.buildGUI();
gui.showGUI();
System.out.println("Fin");
while(true)
{
gui.waitOfUserEvent();
GuiData data = gui.getUserEvent();
if(data instanceof ButtonEvent)
{
ButtonEvent event = (ButtonEvent) data;
String answer = base.getRequestAnswer(event.getText());
System.out.println(answer);
ButtonEventAnswer bea = new ButtonEventAnswer();
bea.setTitle(answer);
gui.setUserEvent(bea);
}
}
}
}
Zuguterletzt die "Datenbank"
Java:
public class Database
{
private Map<String,String> base;
public void init()
{
base = new TreeMap();
base.put("Test", "TestValue");
base.put("Auto", "Audi");
base.put("Programm", "Excel");
}
public String getRequestAnswer(String s)
{
return base.get(s);
}
}
Jetzt zu meinen Fragen:
- Ist es Sinnvoll es so zu machen?
- wie macht man es regulär?
- wie würdet ihr es umsetzten?
- gibt es vielleicht in hinblick auf OO bessere Prinzipien?
Ich danke schon mal für eure Antworten
Viele Grüße,
Meeresgott
Edit:
Vielleicht ist es noch wichtig zu wissen, dass ich nach einem Muster/Konzept oder ähnliches suche, was ich bei einer recht komplexen GUI anwenden kann, dass nicht stark anfällig für Veränderungen ist.
Zuletzt bearbeitet: