Eigenen Input JDialog (Swing) schreiben

Freesurfer

Grünschnabel
Ich hab schon das ganze net durchgooglet, aber noch nichts sinnvolles gefunden.
Ich möchte ein Programm "sichern" so dass man am Anfang Nutzernamen und Password eingeben muß, dass wollte ich über einen InputDialog machen, leider gibt es kein fertigen mit 2 Text(bzw einem Text-,und einem Password-)feld(ern).
[Habe zumindest keinen gefunden, wenn jemand einen kennt, den nehm ich auch]
Also habe ich mir einen eignenen geschrieben der JDialog extends, soweit kein Thema, aber wie komme ich an die Eingaben in dem Dialog, am liebsten wäre mir wie bei showInputDialog, dass ich die Daten direkt als "Rückgabewert" kriege.
Probiert habe ich es schon über einen PropertyChangeEvent in dem Dialog, aber das Hauptfenster "hört" die Events nicht, also reagiert nicht drauf...
Ich komm einfach nicht weiter [kann auch sein, dass ich den Wald vor lauter Bäumen nicht sehe, also bin für jede antwort Dankbar]

mfg

Freesurfer
 
Schreibe dir doch einfach in deinem Hauptprogramm (GUI) eine Methode, die dir dein LoginDialog anzeigen kann. Der Dialog hat zb zwei Buttons (OK und Abbrechen).

Im Konstruktor deiner Hauptanwendung lässt du den Dialog aufpoppen, wenn dann Login und Passwort korrekt sind und mit OK bestätig wurde, lässt du dein Hauptprogramm mit setvisible(true) anzeigen. Ist was falsch, dann halt nicht.

Wenn jemand im Dialog auf Abbrechen klickt, dann kann ja die Anwendung mit exit(0) geschlossen werden.

Wenn du nicht klar kommst, melde dich einfach nochmal.
 
Hallo Freesurfer,
ich habe hier mal schnell ne kleine Anwendung geproggt, die dein Login realisiert.
Ist bestimmt nicht das Eleganteste, aber funktioniert:

Code:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

/*
 * Created on 01.03.2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author Zilchinger
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class GUImitLogin extends JFrame{

    private static final String USER ="admin";  //User
    private static final String PW ="password"; //und PW zum Einloggen
    GUImitLogin mainFrame = null;


    public GUImitLogin(){
        super("Meine Hauptanwendung");
        this.setSize(new Dimension(800,600));
        this.setLocationRelativeTo(null);
        this.getContentPane().add(new JLabel("Hallo ich bins"));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame = this;
        
    }

    
    
    private void loginDlg(){
        final JDialog login = new JDialog();   
        final JPasswordField txtPW = new JPasswordField("");
        final JTextField txtUser = new JTextField("");
        
        //Dialog selbst
        login.getContentPane().setLayout(null);
        login.setSize(new Dimension(300,200)); 
        login.setLocationRelativeTo(mainFrame);
        login.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
        
        
        //User
        JLabel lblUser = new JLabel("User:");
        lblUser.setBounds(20,20,160,20); 
        login.getContentPane().add(lblUser);
        txtUser.setBounds(20,40,260,20);
        login.getContentPane().add(txtUser);
        
        //Password
        JLabel lblPW = new JLabel("Password:");
        lblPW.setBounds(20,60,160,20);
        login.getContentPane().add(lblPW);
        txtPW.setBounds(20,80,260,20);
        login.getContentPane().add(txtPW);
        
        //Button Login
        JButton cmdLogin = new JButton("Login");
        cmdLogin.setBounds(20,120,100,20);
        cmdLogin.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                if ((txtUser.getText().equalsIgnoreCase(USER))&&
                	(txtPW.getText().equalsIgnoreCase(PW))){
                    mainFrame.setVisible(true);
                    login.setVisible(false);  
                }else{
                    JOptionPane.showMessageDialog(null,"Falsche Eingabe");
                }
                
            }
        });
        login.getContentPane().add(cmdLogin);
        
        //Button Beenden
        JButton cmdClose = new JButton("Beeneden");
        cmdClose.setBounds(180,120,100,20);
        cmdClose.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
               System.exit(0);  
            }
        });

        login.getContentPane().add(cmdClose);
        
        login.setVisible(true);
    }
    public static void main(String[] args) {
        new GUImitLogin().loginDlg();
    }
 
}
 
Hi, da ich das gleich Problem hatte, poste ich hier mal meine Lösung, auch wenn der Thread schon älter ist. Wer weiß, vielleicht brauch es ja mal jemand.

Aufrufen lässt sich das ganze wie beim JOptionPane, einfach mit
Code:
meinStringArray = JLoginDialog.showLoginDialog(text, titel);

Also hier die Klasse:

Code:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;



/**
 *
 * @author Daniel Dormann
 */

public class JLoginDialog extends JComponent implements ActionListener {
    private static String[] result = { null, null };
    private static JDialog dialog;
    private static JTextField tUser;
    private static JPasswordField tPassword;
    
    
    public JLoginDialog(String title, String text) {
        GridBagConstraints gbc = new GridBagConstraints();
        dialog = new JDialog();
        
        
        dialog.setTitle(title);
        dialog.setModal(true);
        dialog.setSize(250, 150);
        dialog.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width / 2 - 125, Toolkit.getDefaultToolkit().getScreenSize().height / 2 - 75);
        dialog.setLayout(new GridBagLayout());
        
        gbc.fill = gbc.HORIZONTAL;
        gbc.gridheight = 1;
        gbc.gridwidth = 3;
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.weightx = 1.0;
        gbc.weighty = 1.0;
        gbc.insets = new Insets(0, 10, 0, 10);
        
        JLabel lText = new JLabel(text);
        lText.setHorizontalAlignment(JLabel.CENTER);
        dialog.add(lText, gbc);

        gbc.fill = gbc.NONE;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.weightx = 0.0;
        gbc.weighty = 1.0;
        gbc.insets = new Insets(0, 10, 0, 0);
        
        
        JLabel lUser = new JLabel("Benutzer");
        dialog.add(lUser, gbc);
        
        gbc.fill = gbc.HORIZONTAL;
        gbc.gridheight = 1;
        gbc.gridwidth = 2;
        gbc.gridx = 1;
        gbc.gridy = 1;
        gbc.weightx = 0.5;
        gbc.weighty = 1.0;
        gbc.insets = new Insets(0, 10, 0, 10);
        
        
        tUser = new JTextField();
        tUser.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == evt.VK_ENTER)
                        OKPressed();
            }
        });          
        
        dialog.add(tUser, gbc);

        gbc.fill = gbc.NONE;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.weightx = 0.0;
        gbc.weighty = 1.0;
        gbc.insets = new Insets(0, 10, 0, 0);

        
        JLabel lPassword = new JLabel("Passwort");
        dialog.add(lPassword, gbc);
        
        gbc.fill = gbc.HORIZONTAL;
        gbc.gridheight = 1;
        gbc.gridwidth = 2;
        gbc.gridx = 1;
        gbc.gridy = 2;
        gbc.weightx = 0.5;
        gbc.weighty = 1.0;
        gbc.insets = new Insets(0, 10, 0, 10);
        
        tPassword = new JPasswordField();
        tPassword.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == evt.VK_ENTER)
                        OKPressed();
            }
        });          
        dialog.add(tPassword, gbc);

        gbc.fill = gbc.NONE;
        gbc.anchor = gbc.CENTER;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        gbc.gridx = 1;
        gbc.gridy = 3;
        gbc.weightx = 0.0;
        gbc.weighty = 1.0;
        gbc.insets = new Insets(0, 10, 0, 10);
        
        JButton bOK = new JButton("OK");
        bOK.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                OKPressed();
            }
        });
      
        
        dialog.add(bOK, gbc);        

        gbc.fill = gbc.NONE;
        gbc.anchor = gbc.CENTER;
        gbc.gridheight = 1;
        gbc.gridwidth = 1;
        gbc.gridx = 2;
        gbc.gridy = 3;
        gbc.weightx = 0.0;
        gbc.weighty = 1.0;
        gbc.insets = new Insets(0, 0, 0, 10);
        
        JButton bCancel = new JButton("Abbrechen");
        bCancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.exit(1);
            }
        });
        
        dialog.add(bCancel, gbc);        

        dialog.setVisible(true);
        
    }
    
    public static String[] showLoginDialog(String text, String title) {
        
        
        JLoginDialog jld = new JLoginDialog(text, title);
        
        return result;
    }

    private void OKPressed() {
        result[0] = tUser.getText();
        result[1] = String.valueOf(tPassword.getPassword());
        
        dialog.setVisible(false);
        dialog.dispose();
    }
    
    public void actionPerformed(ActionEvent e) {
    }
    
}
 
Zuletzt bearbeitet:
Zurück