Fokus und JTextField

Status
Nicht offen für weitere Antworten.

Alex_winf01

Top Contributor
Hallo liebe Forengemeinde,

wie kann ich den Fokus in ein bestimmtes Textfeld legen, dass der Anwender gleich "losschreiben" kann?

Beispiel:

Anmelde-Dialog für eine DB. Der Anwender muss bei mir derzeit erst auf in das Textfeld Benutzername klicken. Ich möchte, dass das Programm gleich in diesem Feld steht. Wie kann ich das machen?
 
Klappt leider nicht. Der Anwender muss immer noch in das Textfeld klicken.

Hier mein Code:

Code:
JOpptionPane.showOptionDialog(null, pnl_mein, "DB-Anmeldung", JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, s_options)

pnl_main beinhaltet dann die Label und die Textfelder.
 
Code:
String[] s_options = {"Anmelden", "Abbrechen"};
JPanel pnl_main = new JPanel();
pnl_main.setLayout(new GridLayout(3,3,10,10));

JLabel lbl_username = new JLabel("Benutzername: ", JLabel.RIGHT);
txt_username = new JTextField();
txt_username.reqiestFocusInWindow();

JLabel lbl_password = new JLabel("Passwort: ", JLabel.RIGHT);
txt_password = new JPasswordField();

pnl_main.add(lbl_username, 0);
pnl_main.add(txt_username, 1);
pnl_main.add(lbl_password, 2);
pnl_main.add(txt_password, 3);

Ich möchte einfach nur, dass der Cursor sich im Textfeld Benutzername bei Aufruf befindet, damit der Anwender sofort mit der Eingabe beginnen kann.
 
mal eine andere Frage wo hast du gesehen das es diese Methode showOptionDialog mit den Parametern die du da beschrieben hast gibt?

API JOptionPane

showOptionDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue)


ich habe nur diese Methodendefinition gefunden :shock:

nicht die die du verwenden möchtest
 
requestFocusInWindow darf erst aufgerufen werden, wenn dein Textfeld schon sichtbar ist.

Code:
SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
               {
                     txt_username.reqiestFocusInWindow();
               }
        });
 
outbreaker hat gesagt.:
mal eine andere Frage wo hast du gesehen das es diese Methode showOptionDialog mit den Parametern die du da beschrieben hast gibt?

API JOptionPane

showOptionDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon, Object[] options, Object initialValue)


ich habe nur diese Methodendefinition gefunden :shock:

nicht die die du verwenden möchtest

Genau die verwendet er doch.
 
habe ich wohl nicht richtig hingesehen 😳

aber ein Argument fehlt am Ende trotzdem :wink: das hat mich dann wohl verwirrt

so funktioniert es:

Code:
String[] s_options = {"Anmelden", "Abbrechen"};
JPanel pnl_main = new JPanel();
pnl_main.setLayout(new GridLayout(3,3,10,10));

JLabel lbl_username = new JLabel("Benutzername: ", JLabel.RIGHT);
JTextField txt_username = new JTextField();

JLabel lbl_password = new JLabel("Passwort: ", JLabel.RIGHT);
JTextField txt_password = new JPasswordField();

pnl_main.add(lbl_username, 0);
pnl_main.add(txt_username, 1);
pnl_main.add(lbl_password, 2);
pnl_main.add(txt_password, 3);
txt_username.requestFocusInWindow();

JOptionPane.showOptionDialog(null, (Object)pnl_main, "DB-Anmeldung", JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, s_options,null);

du musst das
Code:
txt_username.requestFocusInWindow();
weiter nach untenschieben nach dem hinzufügen
 
Alex_winf01 hat gesagt.:
Funktioniert leider nicht. 🙁
Ich glaube mit JOptionPane kann das auch nicht funktionieren.
Die Komponente muss sichtbar sein, aber da der Dialog modal ist
kommt man auch mit invokeLater nicht zum Zug.
Wenn man sich den JDialog selbst macht, ist es aber kein Problem.
Beispiel: Login.java
 
Alex_winf01 hat gesagt.:
Funktioniert leider nicht. 🙁

das verstehe ich nicht

Das ist meine Klasse und ich habe den Cursor sofort im Eingabefeld für den Benutzernamen

Code:
package testen;

import java.awt.GridLayout;

import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class T1 {

	public T1() {
		init();
	}
	
	private void init() {
		String[] s_options = {"Anmelden", "Abbrechen"};
		JPanel pnl_main = new JPanel();
		pnl_main.setLayout(new GridLayout(3,3,10,10));

		JLabel lbl_username = new JLabel("Benutzername: ", JLabel.RIGHT);
		JTextField txt_username = new JTextField();

		JLabel lbl_password = new JLabel("Passwort: ", JLabel.RIGHT);
		JTextField txt_password = new JPasswordField();

		pnl_main.add(lbl_username, 0);
		pnl_main.add(txt_username, 1);
		pnl_main.add(lbl_password, 2);
		pnl_main.add(txt_password, 3);
		txt_username.requestFocusInWindow();

		JOptionPane.showOptionDialog(null, (Object)pnl_main, "DB-Anmeldung", JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, s_options,null);
	}
	
	public static void main(String[] args) {
				new T1();
	}
}
 
Es funktioniert aber nur, wenn man keinen default Button setzt. So geht's nicht:
JOptionPane.showOptionDialog(..., "Anmelden");
 
outbreaker hat gesagt.:
irgendwie verstehe ich das Problem hier nicht mehr :roll:
Also, irgendwas scheint im Moment immer noch nicht zu funktionieren.
Das Problem ist aber, dass uns noch nicht genau gesagt wurde, was denn eigentlich noch nicht funktioniert 😀
 
Alex_winf01 hat gesagt.:
Ich kann den Cursor immer noch nicht in das Textfeld setzen - das ist mein Problem.
Gut, das bringt uns schon ein Stückchen weiter.
Jetzt müssten wir noch wissen, um welchen Code es sich handelt. Ist es vielleicht dieser von outbreaker: T1 ?
 
Also der von outbreaker klappt bei mir ohne Probleme nur so nebenbei 😉
 
In der Main-Methode habe ich:

Code:
StartFrame frm = new StartFrame("Ein Fenster");
		frm.setVisible(true);
txt_username.requestFocusInWindow();
		frm.setSize(400,400); // Größe des Fensters festlegen
		frm.pack();
		frm.setResizable(false); // verhindern, dass der Anwender die Größe des Fensters verändert
		frm.setExtendedState(JFrame.MAXIMIZED_BOTH); // auf Vollbildschirm schalten
 
1. du setzt net größe und danach machst du ein pack und dann wieder vollbildschrim---> was für ein Sinn ???
2. solltest du setVisible() nach deinen ganzen größen setzungen machen
3. du sollst das requestFocus.... nach dem add machen
 
@ SirWayne

Auch dann funzt es nicht, wenn ich es an folgender Stelle mache:

Code:
String[] s_options = {"Anmelden", "Abbrechen"};
      JPanel pnl_main = new JPanel();
      pnl_main.setLayout(new GridLayout(3,3,10,10));

      JLabel lbl_username = new JLabel("Benutzername: ", JLabel.RIGHT);
      JTextField txt_username = new JTextField();

      JLabel lbl_password = new JLabel("Passwort: ", JLabel.RIGHT);
      JTextField txt_password = new JPasswordField();

      pnl_main.add(lbl_username, 0);
      pnl_main.add(txt_username, 1);
      pnl_main.add(lbl_password, 2);
      pnl_main.add(txt_password, 3);
      txt_username.requestFocusInWindow();

Funzt auch nicht.
 
requestFocusInWindow() funktioniert nur, wenn die entsprechende Komponente schon sichtbar ist.

Du kannst es damit versuchen, das hat bei mir funktioniert:
Code:
SwingUtilities.invokeLater(new Runnable()
			{
				public void run()
				{
					txt_username.requestFocusInWindow()
				}
			});
 
SirWayne hat gesagt.:
Also der von outbreaker klappt bei mir ohne Probleme nur so nebenbei 😉
Das macht jetzt schon mindestens drei Leute, bei denen es funktioniert.
Wir können also erstmal davon ausgehen, dass es auch bei Alex_winf01 funktioniert.
Keine Ahnung, was das hin und her hier soll :roll:
 
@ Alex_winf01 nicht einfach den Code der funktioniert und das Thema ist erledigt.....
 
nein es geht darum das man sich an dem Code auch mal orientieren könnte und nicht Fehler macht die vielleicht eindeutig in dem Codebeispielen nicht drin sind :autsch:

So war das wohl eher gemeint :wink:
 
Habe das auch mal überprüft, da ich das selbe Problem hatte bei mir lag es daran das man wirklich als Options selber ein Array übergeben muss und nicht einfach die vordefinierten Buttons. Erst dann funktioniert die ganze Sache. Bei anderen showxxx-Methoden kann man es übrigens generell vergessen.
 
gibt es keine einfachere methode bei einem Fenster was geöffnet wird die Kurcor in ein bestimmtest Feld zu stecken??
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben