Eigene MessageBox kreieren

GunGrave01

Mitglied
Hallo zusammen. Ich möchte bei manchen Abläufen eine MessageBox aufrufen welche sich nentweder nach drei sekunden selbst schliesst oder durch das Drücken der OK Taste verschwinden tut. Ich habe jetzt mittels NetBeans ein JPanel kreiert. Ich habe aber keine Ahnung wie ich diese Messagebox jetzt an unterschiedlichen Stellen des meines Codes aufrufen kann. Könnte mir eventuell jemand mal nen Tip geben.

Java:
public class CustomMsgBox extends javax.swing.JPanel {

    /** Creates new form CustomMsgBox */
    public CustomMsgBox() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        ReadSuccessfulFrame = new javax.swing.JFrame();
        OKButton = new javax.swing.JButton();
        ReadSuccessful = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();

    .
    .
    .
    .

    // Variables declaration - do not modify
    private javax.swing.JButton OKButton;
    private javax.swing.JLabel ReadSuccessful;
    private javax.swing.JFrame ReadSuccessfulFrame;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    // End of variables declaration
}

Danke schon mal.

Gruß
Dennis
 
Also erstmal solltest du daraus nen JDialog machen. Also nicht extends JPanel sondern extends JDialog. Dann machste ne Methode display(), die intern erst setVisible(true) macht und dann nen Timer startet, der nach 3 Sekunden ein dispose() aufruft.
 
Hi HDI, danke für den Tip,

hab jetzt bissi was geändert,

Java:
public class CustomMsgBox extends javax.swing.JDialog {

    /** Creates new form CustomMsgBox */
    public CustomMsgBox(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
    }

    
    public void read_successful()
    {
        this.setVisible(true);
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
.
.
.

//OK pressed
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
    this.setVisible(false);
.
.
.
}


Ok, wollte jetzt die Methode innerhalb einer anderen Klasse aufruen mit,

CustomMsgBox.read_successful();

bekomme aber ne Fehlermeldung, "non-static method read_successful() cannot be referenced from a static context"

ne Idee was ich falsch mache?
 
Diese Methode ist nicht-statisch (es fehlt das Keyword static). Das bedeutet sie ist an die Instanz gebunden, und ohne Instanz kannst du sie nicht aufrufen.

Es ist richtig, dass die Methode nicht-statisch ist. Was falsch ist ist der Aufruf.

Nicht:

Java:
CustomMsgBox.read_successful();

sondern:

Java:
CustomMsgBox box = new CustomMsgBox(myFrame, true);
box.read_successful();

Das ist eigentlich sehr basic.. Du scheinst noch Lücken in den Grundlagen zu haben.. Warum fangen alle eigentlich immer schon am zweiten Tag an irgendwelche GUIs mit MessageBox und so n Quatsch zu machen, wenn sie noch nicht mal die Bedeutung von static kennen.. :autsch: Lass dir Zeit, und bring dir erstmal die Grundlagen bei.

PS: Methodennamen schreibt man in
Code:
lowerCaseCamelCase
, also:
Code:
readSuccessful
();
 
Hi hdi, danke.

Ich habe vorher nur C programmiert, hab jetzt ne fertige Software vom Chef vorgelegt bekommen in Java. Diese soll ich um einige Features erweitern. MÖglichst schnell und effektiv !

???:L
 
MÖglichst schnell und effektiv !
Widerspruch 😉

Dann kurz Crashkurs static:

Methode ist static => Kannste aufrufen ohne Objekt, also Klassenname.methode
Methode nicht static => Kannst nur mit Objekt aufrufen: objekt.methode

in nicht-statischen Methoden hast du Zugriff auf statische und nicht-statische Variablen. In statischen Methoden nur auf statische. Nicht-statische Variablen existieren für jedes Objekt einzeln. Statische Variablen existieren genau einmal im gesamten Programm.

Du brauchst für deine Box am besten nen nicht-statischen Kontext, dann kannste nämlich mehrere Boxen (auch gleichzeitig) anzeigen. Du hast die Methode also richtig geschrieben. Nur der aufruf war halt falsch.
 
hdi, vielen Dank, es funzt jetzt mehr oder weniger. Das mit dem Timer werd ich versuchen selbst hinzukriegen, falls ich Probleme bekomme, melde ich mich noch 🙂

By the way, kann ich anstatt dispose() setVisible(false) anwenden für die MessageBox?

Thanks
Dennis
 
Kannst du, aber dispose() ist hier besser. Denn dispose() gibt alle Ressourcen für die MsgBox wieder frei, setVisible(false) verwendet man nur, wenn man vorhat immer wieder die selbe Box anzuzeigen. Aber du erzeugst immer eine neue Box, und solltest ordentlich "aufräumen" wenn du sie geschlossen hast -> also dispose().
 
Kurze Anfrage. Wie ist es wenn ich mehrere MessageBoxes kreieren möchte, muss ich immer eine neue Klasse definieren für jede Box, oder kann ich alle in einer Klasse unterbrignen?

Im moment rufe ich meine MsgBox mit auf,

Java:
 public void read_successful()
    {
        this.setVisible(true);
    }

Kann ich den "this" Aufruf mit bestimmeten MsgBoxes ersetzen?

Möchte z.B. vier MsgBoxes ReadSuccessful, ReadFailed, WriteSuccessful, WriteFailed haben.

Danke
Gruß
Dennis
 
this bleibt this.. Du solltest dir 4 verschiedene Instanzen erzeugen. Also 4x new MsgBox(). Die Gemeinsamkeiten aller Boxen sind über die Klasse definiert. Unterschiede zwischen den einzelnen Boxen kannst du zB über Konstruktor-Parameter festlegen, zB der Text der angezeigt werden soll etc.
 

Neue Themen


Zurück
Oben