Beim Starten ein JTextfield Focus geben

Status
Nicht offen für weitere Antworten.

Dusk

Mitglied
Morgen.

Ich denke mal der Titel ist schon sehr aussagekräftig. Ich hab ein "Spiel", welches mehr oder weniger ahnungslosen Menschen zeigen soll, dass man keine leicht zu erratenden Passwörter nehmen soll. Das ist im Rahmen eines Projekt hier in der Firma, das jungen Mädchen (9 Klasse Realschule) die IT-Berufe näher bringen soll.
However.

Das "Spiel" funktioniert auch einwandfrei. Ich bin aber momentan dabei, son paar Sachen zu verfeinern. Mein Problem ist nun das ich nicht weiß, wie ich dem textfield txnick gleich zu anfang den Focus geb.

wäre für hilfe dankbar.

Hier der Code:



Code:
package passwort;

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

public class Stufe1 implements ActionListener, KeyListener, FocusListener {
    
    JFrame frame = null;
    JLabel ausgabe = null;
    JTextField txnick = null;
    JPasswordField txpwd = null;
    JButton goon = null;
    
    /** Creates a new instance of Stufe1 */
    public Stufe1() {
        frame = new JFrame("Level 1");
        frame.setLocation(100,100);
        frame.setSize(800,600);
        
        
        frame.setResizable(false);
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setLayout(null);
        
        
        JPanel pan1 = new JPanel();
        pan1.setLayout(null);
        pan1.setBounds(5,5,785,500);
        
        JPanel pan2 = new JPanel();
        pan2.setLayout(null);
        pan2.setBounds(5,510,785,54);
        
        JTextArea text = new JTextArea();
        text.setLineWrap(true);
        text.setWrapStyleWord(true);


        text.setText("\n\nMark:\nMark ist 16 Jahre Alt und geht auf die Realschule \"Am Wall\" und wohnt in der 
        Stadt Emden. 
        \nEr hat, mit seiner Zwillingsschwester zusammen, am 15.04. Geburtstag. 
        \nSeit ca 2 1/2 Jahren hat er einen Hund namens Tequila bekommen. 
        \n\nZu seinen Hobby gehören Radfahren, Fußball und er chattet gerne bei Knuddels. 
        Er spielt seit er laufen kann Fußball bei seinem Lieblingsverein SV Treffer. 
        \n\n\n\nEr wollte sich jetzt in seinen E-Mail-Account einloggen, den er vor ca 2 Jahren erstellt hat. 
        Sein Benutzername ist \"Mark\" aber leider hat er sein Passwort vergessen. 
        Er weiß, dass es irgendwas mit ihm selbst zu tun hat aber er kann sich leider nicht mehr dran erinnern. 
        \n\nFinde es heraus.");


        text.setBounds(0,0,785,500);
        text.setEditable(false);
        text.addKeyListener(this);

        frame.addKeyListener(this);

        pan1.addKeyListener(this);
        pan2.addKeyListener(this);

        pan1.add(text);
        
        JLabel nick = new JLabel("Benutzername:");
        JLabel pwd = new JLabel("Passwort:");
        nick.setBounds(0,0,100,22);
        pwd.setBounds(0,27,100,22);
        
        txnick = new JTextField();
        txnick.setBounds(105,0,100,22);
        txnick.addKeyListener(this);
        
        txpwd = new JPasswordField();
        txpwd.setBounds(105,27,100,22);
        txpwd.addKeyListener(this);
                
        txnick.addFocusListener(this);
        txpwd.addFocusListener(this);
        
        txnick.setName("txnick");
        txpwd.setName("txpwd");
        
        JButton but = new JButton("Anmelden");
        but.addActionListener(this);
        but.setActionCommand("login");
        but.setBounds(210,27,100,22);
        but.addKeyListener(this);
        
        ausgabe = new JLabel();
        ausgabe.setBounds(210,0,500,22);
        
        goon = new JButton("Nächste Stufe");
        goon.addActionListener(this);
        goon.setActionCommand("goon");
        goon.setBounds(580,27,200,22);
        goon.setVisible(false);
        
        pan2.add(nick);
        pan2.add(pwd);
        pan2.add(txnick);
        pan2.add(txpwd);
        pan2.add(but);
        pan2.add(ausgabe);
        pan2.add(goon);
        
        frame.getContentPane().add(pan1);
        frame.getContentPane().add(pan2);
        frame.setVisible(true);
        
        
    }
    
    public void checkZugang() {
        String nick = txnick.getText();
        String pwd = new String(txpwd.getPassword());
        if (nick.equalsIgnoreCase("Mark")) {
            if (pwd.equals("Tequila")) {
                ausgabe.setText("Gratuliere Stufe 1 erfolgreich gelöst.");
                goon.setVisible(true);
            } else {
                ausgabe.setText("Passwort falsch. Groß- und Kleinschreibung beachtet?");
                txpwd.selectAll();
            }
        } else {
            ausgabe.setText("Benutzername falsch.");
            txnick.selectAll();
        }
    }
    
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("login")) {
            this.checkZugang();
        } else if (e.getActionCommand().equals("goon")) {
            frame.setVisible(false);
            Stufe2 stufe2 = new Stufe2();
        }
    }
    
    public void keyTyped(KeyEvent e) {
    }
    
    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_ENTER ) {
            this.checkZugang();   
        }
        
    }
    
    public void keyReleased(KeyEvent e) {
    }
    
    public void focusGained(FocusEvent e) {
        Component c = e.getComponent();
        if (c.getName().equals("txnick")) {
            txnick.selectAll();
        } else if (c.getName().equals("txpwd")) {
            txpwd.selectAll();
        } 
    }
    
    public void focusLost(FocusEvent e) {
    }
    
}


Das ganze besteht halt aus insgesamt 5 Leveln. Die Anderen sehen auch ungefähr so aus 😉

Ach ja, und für Kritik/Anregungen/Vorschläge jeglicher Art bin ich immer dankbar (was kann ich besser/anders machen?)


Dusk

EDIT:
Hatte vergessen zu erwähnen das ich mcih schon ein bissl im forum durchgewälzt hab und auch schon einige male etwas mit txnick.requestFocusInWindow() usw probiert hab aber irgendwie wollte es nicht so richtig. in nem anderen beitrag hat jemand gesagt das es an der falschen stelle nichts bringt. deswegen poste ich "meinen speziellen" fall ^^

EDIT2:
Der übersicht wegen habe ich den text in der TextArea mit zeilenumbrüchen versehen. hoffe mal dadurch verfälscht sich nichts.
 
txnick.requestFocus();

habs in Zeile 107 eingeschoben also vor dem frame.setVisible() gepackt.

leider gehts net =/
 
Probiers halt mal nach dem setVisible(true); eventuell auch requestFocusInWindow() ausprobieren
 
naja, wenn nix visible ist, kann auch nix den Fokus bekommen. Also zuerst visible, dann fokus!
 
ok nun gehtz danke =) aber mir erscheint das nicht richtig Oo

sieht nun folgendermaßen aus:


Code:
        frame.getContentPane().add(pan1);
        frame.getContentPane().add(pan2);

        frame.setVisible(true);
        txnick.requestFocusInWindow();
        txnick.requestFocus();

wäre nun dankbar für eine erklärung warum das gerade SO aussehen muss. ich meine nicht, dass fokussieren nach dem sichtbar setzen sondern erst requestFocusInWindow() und dahinter requestFocus()

ich hab beide einzeln versucht aber das geht nicht Oo
 
Also requestFocusInWindow funktioniert bei mir auch ohne requestFocus. Weil ich das normal immer so mache, ohne requestFocus.
 
dann hat das scheinbar irgendwas mit netbeans zu tun.
hab die jar datei normal geöffnet das geht es auch ohne requestFocus()

danke =)
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben