Username/Password für Login

wL4

Grünschnabel
hi,

kurze frage, für die geeks unter euch sicher mit leichtigkeit zubewältigen :)

ich möchte ein usernamen und passwort feld erstellen und in diesen einen text stehn haben. sobald man reintabbt oder mit der maus reinklickt, soll dieser natürlich verschwinden. tipp man nun etwas ein, soll dieser text stehen bleiben.
tabt man rein, tippt jedoch nix, und tabbt weiter, soll der ursprüngliche blindtext wieder erscheinen.

login JLabel, passwort JPasswordField

bitte um hilfe :o)?
 
Habe mich gerade mal eben ein wenig in der JavaAPI umgesehen nach dem passenden Listener. Ich denke mal, dass du den Umgang mit Listenern kennst wenn du dich an derartige Sachen wagst. Falls nicht melde dich nochmal. Also, sowohl JTextField auch JPasswordField erben von java.awt.Component. In Component gibt es die Möglichkeit über addFocusListener einen FocusListener hinzuzufügen der immer dann benachrichtigt wird wenn die Komponente im Fokus ist, was bei dir bedeutet, wenn in das entsprechende Feld geklickt wird. Der FocusListener wird auch benachrichtigt wenn die Komponente den Fokus verliert, also wenn z.B. in das andere Feld geklickt wird. Das dürfte das sein was du suchst.

EDIT:
Hab gerade noch nen bisschen Zeit, deswegen poste ich nochmal eben ein kleines Beispiel dazu, in dem genau das passiert was du willst.

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

public class FocusTest {

    private static final String USER = "Username";
    private static final String PASS = "Password";

    public static void main(String[] args) {
        new FocusTest();
    }

    public FocusTest() {
        JFrame window = new JFrame("Fokus Test");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setLayout(new FlowLayout());
        final JTextField user = new JTextField(USER);
        user.addFocusListener(new FocusListener() {
                                public void focusGained(FocusEvent e) {
                                    if(user.getText().equals(USER)) {
                                        user.setText("");
                                    }
                                }
                                public void focusLost(FocusEvent e) {
                                    if(user.getText().equals("")) {
                                        user.setText(USER);
                                    }
                                }
                                });
        final JPasswordField pass = new JPasswordField("Password");
        pass.addFocusListener(new FocusListener() {
                                public void focusGained(FocusEvent e) {
                                    if((new String(pass.getPassword()).equals(PASS))) {
                                        pass.setText("");
                                    }
                                }
                                public void focusLost(FocusEvent e) {
                                    if((pass.getPassword().length == 0)) {
                                        pass.setText(PASS);
                                    }
                                }
                                });
        window.add(user);
        window.add(pass);
        window.pack();
        window.setVisible(true);
    }
}
 
Zuletzt bearbeitet:
Hi zusammen,

Technoblade's Beispiel ist ja eigentlich schon ausreichent, ich habs jetzt trotzdennochmal etwas erweitert:

- graue Schrift für Muster-Eingaben (sieht man schließlich häufig)
- feste größen der Textferder => schönere Darstellung
- Passwort-Tooltip (Im Feld kann man den Test ja nicht lesen)

Hier also mein Quellcode:

Java:
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class FocusTest {
 
    private static final String USER = "Username";
    private static final String PASS = "Password";
 
    public static void main(String[] args) {
        new FocusTest();
    }
 
    public FocusTest() {
        JFrame window = new JFrame("Fokus Test");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setLayout(new FlowLayout());
        final JTextField user = new JTextField(15);
        	user.setText(USER);
        	user.setForeground(Color.gray);
        user.addFocusListener(new FocusListener() {
            public void focusGained(FocusEvent e) {
                if(user.getText().equals(USER)) {
                    user.setText("");
                    user.setForeground(Color.black);
                }
            }
            public void focusLost(FocusEvent e) {
                if(user.getText().equals("")) {
                    user.setText(USER);
                    user.setForeground(Color.gray);
                }
            }
        });
        final JPasswordField pass = new JPasswordField(15);
        	pass.setText(PASS);
        	pass.setForeground(Color.gray);
        	pass.setToolTipText(PASS);
        pass.addFocusListener(new FocusListener() {
            public void focusGained(FocusEvent e) {
                if((new String(pass.getPassword()).equals(PASS))) {
                    pass.setText("");
                    pass.setForeground(Color.black);
                }
            }
            public void focusLost(FocusEvent e) {
                if((pass.getPassword().length == 0)) {
                    pass.setText(PASS);
                    pass.setForeground(Color.gray);
                }
            }
        });
        window.add(user);
        window.add(pass);
        window.pack();
        window.setVisible(true);
    }
}

javaDeveloper2011
 
  • Gefällt mir
Reaktionen: wL4
super vielen dank :)

das einzige was mir noch fehlt, ist nun, dass ich mit der eingabetaste mein Verbindungsbutton aktivier wird.

könnt ihr mir da auch noch fix helfen :)?
 
Zuletzt bearbeitet:
Jup, du kannst zu jedem JTextField ActionListener hinzufügen die aktiviert werden wenn die Entertaste gedrückt wird. Da kannst du dann einfach den selben ActionListener nehmen den du auch dem Button hinzufügst der die Verbindung aufbauen soll.
 
  • Gefällt mir
Reaktionen: wL4
Zurück