Login Window mit Swing

bl4ck29

Mitglied
Nabend...

ich hab nen Problem und nichmal nen wirklichen Anfang zum lösen des Probs. Ich möchte beim Programmstart ne Username+Password als kleines Window haben, danach soll abhängig vom Login Panel 1 oder Panel 2 kommen. Ich weiss nicht wirklich wie ich am Anfang nur nen kleines Window bekomme was danach bei erfolgreichem Login nen grosses Aufruft oder hat wer nen Rat wie man sowas eventuell anders lösen kann ? Mir würd ne Erklärung schon reichen wie es geht...es muss nich unbedingt Quellcode sein. Bin für alle Antworten dankbar ;)

mfg
 
Hi bl4ck29,

ich bin zwar noch ganz frisch in der GUI Programmierung, würde es eventuell so lösen:

Code:
public static void main ( String[] args ){

    //LoginDialog sollte modal sein 
    LoginDialog d = new LoginDialog();

    if(d.exitValue == 1){
           .....setPanel(panel1);
    }else{ 
          .....setPanel(panel2);
    }
}
Vielleicht hilft Dir das etwas.
 
Hallo!

versuchs mal so:
LoginDialog:
Code:
/**
 * 
 */
package de.tutorials;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.InputVerifier;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.text.JTextComponent;

/**
 * @author Tom
 */
public class LoginDialog extends JDialog {

	private JLabel lblUsername;

	private JLabel lblPassword;

	private JTextField txtUsername;

	private JPasswordField txtPassword;

	private JButton btnLogin;

	private final static int MAX_RETRY = 3;

	private int loginCnt;

	public LoginDialog(final JFrame owner) {
		super(owner, "LoginDialog");
		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

		InputVerifier verifier = new InputVerifier() {
			public boolean verify(JComponent input) {
				JTextComponent textComponent = (JTextComponent) input;
				return !textComponent.getText().trim().equals("");
			}
		};

		lblUsername = new JLabel("Username: ");
		txtUsername = new JTextField(10);
		txtUsername.setInputVerifier(verifier);

		lblPassword = new JLabel("Password: ");
		txtPassword = new JPasswordField(10);
		txtPassword.setInputVerifier(verifier);

		btnLogin = new JButton("login");

		setLayout(new GridLayout(3, 2));
		add(lblUsername);
		add(txtUsername);

		add(lblPassword);
		add(txtPassword);

		add(btnLogin);

		btnLogin.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String username = txtUsername.getText().trim();
				String password = String.valueOf(txtPassword.getPassword());

				if (username.equals("")) {
					return;
				}

				if (loginCnt++ < MAX_RETRY) {
					try {
						login(username, password);
						owner.setVisible(true);
						setVisible(false);
						dispose();
					} catch (SecurityException e1) {
						JOptionPane.showMessageDialog(LoginDialog.this,
								"Authentifikation fehlgeschlagen!\nVerbleibende Versuche: "
										+ (MAX_RETRY - loginCnt), "Fehler",
								JOptionPane.ERROR_MESSAGE);
					}
				} else {
					JOptionPane
							.showMessageDialog(
									LoginDialog.this,
									"Authentifikation fehlgeschlagen!\nMaximale Loginversuche aufgebraucht!",
									"Fehler", JOptionPane.ERROR_MESSAGE);
					System.exit(-1);

				}
			}
		});

		pack();
		setVisible(true);
		setModal(true);

	}

	private void login(String username, String password)
			throws SecurityException {
		if (!(username.equals("root") && password.equals("admin"))) {
			throw new SecurityException("Illegal Login!");
		}
	}
}

...
Test:
Code:
/**
 * 
 */
package de.tutorials;

import javax.swing.JFrame;

/**
 * @author Tom
 */
public class LoginExample extends JFrame {

	public LoginExample() {
		super("LoginExample");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(320, 240);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		LoginDialog ld = new LoginDialog(new LoginExample());

	}
}

Gruß Tom
 
eine frage hab ich noch...

ich hab noch nen button "abbrechen" hinzugefügt und möchte aber nun das der button "ok" immer angewählt ist sodas ich einfach nur enter drücken muss wenn ich user+pw eingegeben habe. bei der checkbox geht das so schön mit setSelected....

danke
 
Zurück