Mit TAB JTextPane wechseln

fagune

Mitglied
Hallo,

Ich bin neu hier und hätte da gleich mal eine Frage:
Und zwar habe ich ein Login-Fenster mit zwei JTextPanes, bei denen man eine IP und einen Nickname angeben muss und am Ende ein Button zum Verbinden drückt. Momentan muss man immer in das nächste Textfeld klicken.
Ist es möglich, dass Textfeld mit TAB zu wechseln, so wie man es von Webseiten kennt? Ist ein JTextPane überhaupt das richtige Feld? Denn momentan kann man weit über die Grenzen des Feldes schreiben und durch ENTER auch mehrere Zeilen untereinander schreiben.
Wäre es möglich, wenn man den IP und Nickname eingegeben hat, sich also im zweiten Textfeld befindet, mit dem drücken von ENTER die Funktion des Buttons aufzurufen?
Vielen Dank schon mal!

Gruß,
Lars
 
Benutze zwei JTextField`s!
Wäre es möglich, wenn man den IP und Nickname eingegeben hat, sich also im zweiten Textfeld befindet, mit dem drücken von ENTER die Funktion des Buttons aufzurufen?
Klar, registriere einfach den gleichen ActionListener auch ans zweite TextField !
 
Also müsste ich dafür ein "Key-Event" an das zweite Textfeld "anbinden" dass bei der Eingabe von ENTER dasselbe macht, wie wenn ich auf den Button klicke?!

Wie sieht es denn mit TAB für das erste Textfeld aus?
 
So spontan würde ich das wohl nicht mit einem KeyListener machen, sondern mit einem ActionListener

Hier mal ein ganz ganz simples Beispiel wie man es machen könnte (4 Textfelder für die IP -> da könnte man evtl. auch einen FocusListener, DocumentFilter, oder ein eigenes Document bauen, was direkt die Eingabe prüft)

Java:
import static javax.swing.BorderFactory.createTitledBorder;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class Snippet {

	public Snippet() {
		JFrame frame = new JFrame();
		JPanel panel = new JPanel();

		JPanel ipPanel = new JPanel();
		JTextField field1 = new JTextField(3);
		JTextField field2 = new JTextField(3);
		JTextField field3 = new JTextField(3);
		JTextField field4 = new JTextField(3);
		ipPanel.add(field1);
		ipPanel.add(field2);
		ipPanel.add(field3);
		ipPanel.add(field4);

		ipPanel.setBorder(createTitledBorder("IP address"));
		JPanel nickPanel = new JPanel();
		nickPanel.setBorder(createTitledBorder("nickname"));

		// listener für button + letztes textfeld
		ActionListener loginAction = new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("einloggen....");
			}
		};

		JTextField field5 = new JTextField(15);
		field5.addActionListener(loginAction); // <--- listener
		nickPanel.add(field5);
		JButton btn = new JButton("login");
		btn.addActionListener(loginAction); // <--- listener
		panel.add(ipPanel);
		panel.add(nickPanel);
		panel.add(btn);
		frame.add(panel);
		frame.pack();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				new Snippet();
			}
		});
	}
}
Hilft das weiter? Ansonsten sag nochmal genau wo das Problem besteht!
 
Es ist das, wonach ich gesucht habe. Dafür schon mal danke.

Nun habe ich aber eine Verständnisfrage. Wenn ich TAB und ENTER drücke, wird das gemacht, was ich erwarte, aber wo genau steht das im Quelltext? Den ActionListener sehe ich, aber es wird doch nirgendwo definiert was passiert, wenn ich ENTER oder TAB drücke, oder sehe/ verstehe ich etwas nicht?

lars
 
Hi,

für so etwas sind die Java Tutorials von sun/oracle sehr gut:
How to Use Text Fields (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)

Dort werden auch deine Fragen beantwortet:

Den ActionListener sehe ich, aber es wird doch nirgendwo definiert was passiert, wenn ich ENTER oder TAB drücke
->
A text field is a basic text control that enables the user to type a small amount of text. When the user indicates that text entry is complete (usually by pressing Enter), the text field fires an action event.

Zu dem TAB findest du hier:How to Use the Focus Subsystem (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Other Swing Features) etwas
 

Neue Themen


Zurück
Oben