Moin Moin!
Ich schreibe ein Progamm mit dem ich Projekte verwalten möchte. Daher soll es möglich sein neue Projekte hinzuzufügen. Dafür habe ich einen Dialog-Klasse geschrieben, der von JDialog abgeleitet wurde.
Nachdem der "Hinzufügen"-Button gedrückt wurde, wird der dazugehörige Controller geladen, der erst schaut ob ein Projektname eingetragen wurde. Ist dies nicht der Fall, dann soll der Controller die Anzeige einer Fehlermeldung in dem Dialog verursachen.
Dazu dachte ich, dass ich ein weiteres JLabel in diesem Dialog anzeigen lasse.
Doch leider wird die Fehlermeldung erst angezeigt, wenn man auf den Rand des Dialogfensters klickt. Woran liegt das? Was muss ich machen, damit der Text sofort angezeigt wird?
Ist dies der übliche und saubere Weg sowas zu realisieren? Für allgemeine und weiterführende Tipps bin ich auch sehr dankbar!
Hier die Klasse des Dialoges:
Und hier die Klasse des Controllers:
Ich schreibe ein Progamm mit dem ich Projekte verwalten möchte. Daher soll es möglich sein neue Projekte hinzuzufügen. Dafür habe ich einen Dialog-Klasse geschrieben, der von JDialog abgeleitet wurde.
Nachdem der "Hinzufügen"-Button gedrückt wurde, wird der dazugehörige Controller geladen, der erst schaut ob ein Projektname eingetragen wurde. Ist dies nicht der Fall, dann soll der Controller die Anzeige einer Fehlermeldung in dem Dialog verursachen.
Dazu dachte ich, dass ich ein weiteres JLabel in diesem Dialog anzeigen lasse.
Doch leider wird die Fehlermeldung erst angezeigt, wenn man auf den Rand des Dialogfensters klickt. Woran liegt das? Was muss ich machen, damit der Text sofort angezeigt wird?
Ist dies der übliche und saubere Weg sowas zu realisieren? Für allgemeine und weiterführende Tipps bin ich auch sehr dankbar!
Hier die Klasse des Dialoges:
Java:
package view;
import java.awt.*;
import javax.swing.*;
import controller.AddProjectController;
public class DialogAddProject extends JDialog {
JLabel _label;
JTextField _name;
JPanel _panel;
boolean _error;
public DialogAddProject(ViewGUI owner, String title) {
super(owner, title);
_label = new JLabel("Name des Projektes:");
_name = new JTextField(20);
JButton button = new JButton("Projekt hinzufügen");
button.addActionListener( new AddProjectController( this, owner.getModel() ) );
_panel = new JPanel(new FlowLayout());
_panel.add(_label);
_panel.add(_name);
_panel.add(button);
setSize(600, 200);
setContentPane(_panel);
}
public String getProjectName() {
return _name.getText();
}
public void fireError() {
if(_error != true) { // Diese Abfrage ist dafür da, damit die Fehlermeldung nur einmal angezeigt wird
JLabel errorMsg = new JLabel("Bitte einen Namen für das neue Projekt eingeben!");
_panel.add(errorMsg);
_error = true;
repaint();
}
}
public void fireOkay() {
setVisible(false);
// FRAGE: Ist so das Objekt auch zerstört?
}
}
Und hier die Klasse des Controllers:
Java:
package controller;
import java.awt.*;
import java.awt.event.*;
import model.ProjectLibrary;
import view.DialogAddProject;
public class AddProjectController implements ActionListener {
ProjectLibrary _model;
DialogAddProject _dialog;
public AddProjectController(DialogAddProject dialog, ProjectLibrary model) {
_model = model;
_dialog = dialog;
}
public void actionPerformed(ActionEvent event) {
String name = _dialog.getProjectName().trim();
if(name.isEmpty()) {
_dialog.fireError();
} else {
_model.addProject(name);
_dialog.fireOkay();
}
}
}