JOptionPane selbst programmieren

Status
Nicht offen für weitere Antworten.

Fusel2000

Mitglied
Hallo Forum,

ich programmiere derzeit ein kleines Java-Programm bei dem ich alle GUI's als Frame-Extensions selbst programmiert habe. An ein paar Stellen benötige ich genau das was einem JOptionPane.showInputDialog bzw ConfirmDialog bietet. Also eine Funktion die ein Fenster aufgehen lässt in dem man etwas tun kann und sobald man die Aktion getätigt hat einen Wert in einem bestimmten Datentyp (in meinem Fall halt boolean bzw String) zurückgibt. Ich will dafür nicht JOptionPane benutzen, weil ich will dass es zu meinen anderen Frames passt.

Wie muss ich das Problem angehen? Ich habe schon ein bisschen im Quelltext von JOptionPane und den Oberklassen gestöbert bin aber leider noch nicht fit genug um die passende Stelle an der ich mich orientieren könnte zu entdecken...

Eine kurze Anleitung wie ich an das Problem herangehen könnte wäre ganz prima. Vielen Dank schon im Voraus...
 
S

SlaterB

Gast
der Haupt-Quellcode:

Code:
JDialog dialog = pane.createDialog(parentComponent, title, style);

        pane.selectInitialValue();
        dialog.show(); 
        dialog.dispose();

        Object        selectedValue = pane.getValue();
besser setVisible(true) statt show(), ansonsten hat man so schon mal einen Grundablauf,
der Dialog wird geschlossen, wenn ein Cancel-Button ihn auf setVisibl(false) setzt?

was der Dialog anzeigt und für Werte enthält muss er selber wissen,
am Ende kommt die Abfrage
selectedValue = pane.getValue();

und mehr ist auch gar nicht zu tun
 

Fusel2000

Mitglied
Meine Idee ist etwa folgende:

Code:
public class MeineJOptionPane Nachbaus {

    public String stringAbfrage() {
    String s = null;
    new MeinFenster() {
        //Fenster geht auf in dem ein Textfeld und ein Button sind um s zu verändern
    };
    sobald s != null return s;
    }

}

könnte ich sowas in der Art mit wait() notify() realisieren? s müsste ja auch final sein damit ich es aus der inner class erreiche...
 

Fusel2000

Mitglied
Ich wollte meine selbst programmierten Frames benutzen und nicht auf Swing zurückgreifen. Ist das möglich oder macht JOptionPane irgendwas was sehr tief im System rumwühlt um das Warten zu realisieren.
 

Fusel2000

Mitglied
Ich habe halt eine Klasse
Code:
class MeineFenster extends Frame {

    //ein paar nützliche Funktionen für mein Programm

    private class MeinButton extends Button {

        //hier zB schon ein paar Listener drin

   }

}
Ich gehe stark davon aus, dass es das alles schon fertig gibt ( zB Swing ). Wollte das aber selbst auf diesem etwas niedrigeren Niveau programmieren um was zu lernen.
Bei den "Fenstern mit Rückgabewert" wenn man sie so nennen will bin ich halt leider an meine Grenze gestoßen. Die will ich jetzt aber natürlich etwas ausweiten :)
 

Fusel2000

Mitglied
Okay etwas genauer:
Ich gestehe, dass das ohne Kommentare etwas schwierig ist. Die meisten Sachen sollten sich aber selbst erklären. Im Wesentlichen programmiere ich ein kleines Programm zum Vokabeln lernen. Daher heißt die Klasse VokabeltrainerFenster. Wenn ich ein solches Fenster schließe soll die Funktion schliessen() erst nachfragen ob ich es auch ernst meine und anschließend erst mit kill() alles dicht machen. Hierzu benutze ich derzeit halt noch das JOptionPane.showConfirmDialog() das ich aber gern umgehen würde...

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class VokabeltrainerFenster extends Frame {

    protected VokabeltrainerFenster vater; //Das übergeordnete Fenster von dem aus aufgerufen wurde
    
    public VokabeltrainerFenster( String titel, VokabeltrainerFenster vater ) {
        this.vater = vater;
        this.setTitle( titel );
        this.setMinimumSize( new Dimension( 150, 100 ));      
        this.setLayout( new BoxLayout( this, 1 ) );
        this.pack();
        this.zentrieren();
        this.setVisible( true );
        this.addWindowListener( new MeinWindowListener() ); //findet man unten was das ist
    }
    
    protected VokabeltrainerFenster unterfenster( String titel ) {  //ein Unterfenster wird aufgerufen
//dass das aktuelle unsichtbar macht bis es selbst wieder verschwindet
        this.setVisible( false );
        return new VokabeltrainerFenster( titel, this ); 
    }
    
    protected VokabeltrainerFenster unterfenster( VokabeltrainerFenster unterfenster ) {
        this.setVisible( false );
        return unterfenster;
    }
    
    protected void zentrieren() {  //Fenster auf Bildschirm zentrieren
        pack();
        Dimension frameSize = this.getSize();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int top = (screenSize.height - frameSize.height) / 2;
        int left = (screenSize.width - frameSize.width) / 2;
        this.setLocation(left, top);        
    }
    
    public void wiederDa() {  //Unterfenster ist weg und dieses taucht wieder auf
        this.setVisible( true );
        this.setEnabled( true );
    }
    
    protected void kill() {    //Fenster wird endgültig geschlossen
        if( vater != null ) {
            vater.wiederDa();
            this.dispose();
        }
        else {
            System.exit(0);
        }
    }
    
    protected void schliessen() {  //Nachfrage ob schließen
        if( JOptionPane.showConfirmDialog( this, "Soll das Fenster wirklich geschlossen werden?") == 0 ) {
            this.kill();
        }
    }
    
    private class MeinWindowListener extends WindowAdapter {
        
        public void windowClosing( WindowEvent e ) {
            schliessen();
        }
        
    }
    
    protected abstract class MeinButton extends Button {
        
        protected abstract void aktion();
        
        MeinButton( String name ) {
            super( name );
            ActionListener l = new ActionListener() {
                public void actionPerformed( ActionEvent e ) {
                    aktion();
                }
            };
            addActionListener( l );
            this.setPreferredSize( new Dimension(120, 25) );

            KeyListener tastenDruck = new KeyAdapter() {
                public void keyTyped( KeyEvent e ) {
                    if( e.getKeyChar() == '\n' ) {
                        aktion();
                    }
                }
            };
            addKeyListener( tastenDruck );
                   
        }
        
    }
    
}
 

Tobias

Top Contributor
Es gibt auch in AWT eine Dialog-Klasse, die für "Fenster mit Rückgabewert" genutzt werden kann. Aber ob AWT im Vergleich mit Swing so sehr Low-Level ist, dass man dabei mehr lernt, wage ich zu bezweifeln. Eher lernst du so einfach die falsche, weil unkomfortablere und veraltete Technologie, anstatt direkt etwas sinnvolles zu tun.
Die Verwendung von Swing (und auch AWT) ist für den Anfang komplex genug, du willst eigentlich gar nicht genau verstehen müssen, wie die intern funktionieren, weil du sonst nichts produktives mehr leistest. Heb dir das für später auf und lern jetzt erst einmal AWT oder besser Swing zu verwenden.

Zu deinem Ansatz die JOptionPane in deinem Projekt einzusetzen: Besser nicht, denn dann würdest du AWT und Swing mischen, was fast immer schief geht. Benutz Dialog.

mpG
Tobias
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
nbergmann The type JOptionPane is not accessible. Java Basics - Anfänger-Themen 4
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
T jOptionPane zum schließen von Fenster, wie "Ja" und "Nein" anstatt Yes und No Java Basics - Anfänger-Themen 2
chocobear26 Interface JOptionPane - Dialog_Fenster zeigt immer vorherige Eingabe an. Java Basics - Anfänger-Themen 4
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
M JOptionPane Fehler bei "Abbrechen" des Fensters Java Basics - Anfänger-Themen 10
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
S JOptionPane komplett leeres Fenster Java Basics - Anfänger-Themen 4
Dawinartor Klassen Zeilenumbruch in JOptionPane.showMessageDialog Java Basics - Anfänger-Themen 8
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
T JOptionPane mit eigenem Icon Java Basics - Anfänger-Themen 4
C JOptionPane tritt manchmal bei Plugin in den Hintergrund Java Basics - Anfänger-Themen 2
das_leon JOptionPane Titel setzen Java Basics - Anfänger-Themen 1
J jOptionPane, Array und negative Zahlen Java Basics - Anfänger-Themen 2
B JOptionPane Java Basics - Anfänger-Themen 5
S JOptionPane mit Schleife in einem Ausgabefenster Java Basics - Anfänger-Themen 4
M jOptionPane mit if else Java Basics - Anfänger-Themen 16
K JOptionPane/catch/try/finally/if Java Basics - Anfänger-Themen 9
B JOptionPane Java Basics - Anfänger-Themen 4
N Erste Schritte JOptionPane - zerstörtes Layout Java Basics - Anfänger-Themen 2
D Erste Schritte JOptionPane Java Basics - Anfänger-Themen 7
S JOptionPane/Popup mit GUI Java Basics - Anfänger-Themen 2
R Fehler mit JOptionPane Java Basics - Anfänger-Themen 3
A Fehler bei der Speicherung von JOptionPane-Eingaben Java Basics - Anfänger-Themen 4
N Problem mit JOptionPane und Fenster-Fokus Java Basics - Anfänger-Themen 2
S Bild in JOptionPane Java Basics - Anfänger-Themen 1
L Strings in einem JOptionPane farbig Java Basics - Anfänger-Themen 2
E JOptionPane.showMessageDialog Fehler Java Basics - Anfänger-Themen 1
R Text Pane Aktualisierung erst nach JOptionPane Java Basics - Anfänger-Themen 10
J while (eingabe == "0") eingabe = JOptionPane.showInputDialog("...") Java Basics - Anfänger-Themen 5
S Konsolenausgabe ales JOptionPane? Java Basics - Anfänger-Themen 5
Z Darstellungsfehler mit JOptionPane Java Basics - Anfänger-Themen 2
L Interface JOptionPane Umwandlung Java Basics - Anfänger-Themen 10
L Anderes Layout für JOptionPane? Java Basics - Anfänger-Themen 6
S JoptionPane mit Umbruch Java Basics - Anfänger-Themen 21
Eileen Brüche addieren in Zwei Klassen mit JOptionPane Java Basics - Anfänger-Themen 4
S JOptionPane.showMessageDialog Java Basics - Anfänger-Themen 20
M JOptionPane 2 Angaben in ein Dialogfeld Java Basics - Anfänger-Themen 7
H JOptionPane YES Option mit Folge? Java Basics - Anfänger-Themen 2
P Input/Output JOptionPane Fehlermeldung Catchen Java Basics - Anfänger-Themen 5
N Grafiken in JOptionPane Java Basics - Anfänger-Themen 3
T Benutzereingabe in form von string wieder ausgeben in JOptionPane Java Basics - Anfänger-Themen 14
B Codeschnipsel-Frage zu JOptionPane Java Basics - Anfänger-Themen 4
D Problem mit meinem ersten JOptionPane - Fatal exception occurred. Program will exit. Java Basics - Anfänger-Themen 6
H Focus auf Textfeld in JOptionPane Java Basics - Anfänger-Themen 2
J JOptionPane wiederholt aufrufen Java Basics - Anfänger-Themen 2
M JOptionPane null on closing with X Java Basics - Anfänger-Themen 6
M GUI JOptionPane - Parameter im Konstruktor festlegen? Java Basics - Anfänger-Themen 5
brunothg Internal JOptionPane Icon ändern Java Basics - Anfänger-Themen 5
J CLOSE in JOptionPane Java Basics - Anfänger-Themen 7
S JOptionPane Java Basics - Anfänger-Themen 29
F Alternative zu JoptionPane Java Basics - Anfänger-Themen 7
M Datentypen JOptionPane Java Basics - Anfänger-Themen 13
D JOptionPane ohne Klick-Aufforderung Java Basics - Anfänger-Themen 9
F jOptionPane (ConfirmDialog) aufrufen Java Basics - Anfänger-Themen 2
E JOptionPane Java Basics - Anfänger-Themen 11
J JOptionPane Datum Eingabe Java Basics - Anfänger-Themen 3
R JOptionPane funktioniert nicht mit Abbrechen Knopf Java Basics - Anfänger-Themen 16
H JOptionPane validieren Java Basics - Anfänger-Themen 3
D nur JOptionPane im Windows Style Java Basics - Anfänger-Themen 3
D Wählfenster(JOptionPane) Java Basics - Anfänger-Themen 3
N Hilfe!!! JOptionPane Java Basics - Anfänger-Themen 12
N javax.swing.JOptionPane einbauen? Java Basics - Anfänger-Themen 9
M Hilfe: JOptionPane.showInputDialog Java Basics - Anfänger-Themen 3
T JOptionPane mit .showInputDialog: Ergebnis abfragen? Java Basics - Anfänger-Themen 2
P JOptionPane.showInputDialog Java Basics - Anfänger-Themen 6
L ParentComponent von JOptionPane Java Basics - Anfänger-Themen 2
X JOptionPane.showMessageDialog(); - Import Befehl? Java Basics - Anfänger-Themen 4
C JOptionPane mit Icon Java Basics - Anfänger-Themen 5
G Problem mit JOptionPane. Java Basics - Anfänger-Themen 7
P JOptionPane mit Inhalt? Java Basics - Anfänger-Themen 2
M HTML in JOptionPane-Dialog aber keine Links Java Basics - Anfänger-Themen 6
A JOptionPane -> abbrechen -> NullPointerException Java Basics - Anfänger-Themen 4
M JOptionPane - Dialog Java Basics - Anfänger-Themen 6
C Problem mit JOptionPane.showInputDialog Java Basics - Anfänger-Themen 2
G Schleife mit JOptionPane Java Basics - Anfänger-Themen 6
C JOptionPane in Taskleiste anzeigen Java Basics - Anfänger-Themen 3
G JOptionPane.showInputDialog Java Basics - Anfänger-Themen 2
G Problem miT JOptionPane Java Basics - Anfänger-Themen 6
G JOptionPane.TOOL_TIP_TEXT_KEY wie verwendet man es? Java Basics - Anfänger-Themen 4
G JOptionPane wird nicht angezeigt Java Basics - Anfänger-Themen 3
I Problem bei JOptionPane Java Basics - Anfänger-Themen 3
B JOptionPane in vordergrund bringen Java Basics - Anfänger-Themen 2
G JOptionPane zentrieren? Java Basics - Anfänger-Themen 2
M JOptionPane.OK_OPTION abfangen oder disablen? Wie? Java Basics - Anfänger-Themen 3
G JOptionPane Java Basics - Anfänger-Themen 4
P Probleme mit JOptionPane Java Basics - Anfänger-Themen 7
G JOptionPane Java Basics - Anfänger-Themen 6
B JOptionPane und das zweidimensianle Array Java Basics - Anfänger-Themen 2
M StackOverFlow bei JOptionPane? Java Basics - Anfänger-Themen 23
S JOptionPane.showInputDialog nur ein OK Button Java Basics - Anfänger-Themen 3
G JOptionPane Java Basics - Anfänger-Themen 8
D JOptionPane mit eigenem Icon Java Basics - Anfänger-Themen 2
A Bild einfügen in JOptionPane Java Basics - Anfänger-Themen 5
N JOptionPane.showInputDialog gibt null zurück Java Basics - Anfänger-Themen 9
D Thread und JOptionPane -> Problem Java Basics - Anfänger-Themen 6
D jOptionPane OK Button Java Basics - Anfänger-Themen 4
B JOptionPane mit mehr Eingabeflächen Java Basics - Anfänger-Themen 3
G JOptionPane Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben