Far ottenere il Focus ad un'elemento

Sevenjeak

Utente Attivo
27 Nov 2012
81
2
8
35
sevenjeak.altervista.org
Non saprei che dal titolo si capisce il mio problema, ma io, per provarlo a risolvere ho fatto un mio codice di prova, e facendo delle ricerche su internet.

In poche parole in mio problema è che: avendo un form con un panello a 2 righe, ogni riga contiene un JTextPane, avvio l'applicazione è si seleziona ( focus ) il JTextPane alla prima riga, io vorrei, che all'avvio della mia applicazione il focus andasse al JTextPane della seconda riga, ansi che in quella della prima riga, non so se mi spiego.

Ho già provato utilizzando i metodi requestFocus() e requestFocusInWindow(), ma niente, voi sapete come fare?
 
Ciao,

ci puoi postare il tuo codice?

Secondo me il problema sta nel momento in cui chiedi il focus, mi spiego.

Il focus viene chiesto quando la finestra viene visualizzata, se tu se chiedi il focus del secondo elemento prima che la finestra venga visualizzata, la richiesta è inefficace.

ciao
 
Come sospettavo il problema sta nel quando richiedere il focus, se lo fai prima del setVisible non funziona; sotto il codice (puoi fare tu delle prove).

ciao

Codice:
import java.awt.Container;
import java.awt.FlowLayout;

import javax.swing.JFrame;
import javax.swing.JTextField;

public class DemoGui extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	// Class Declarations
	JTextField jtfText1, jtfText2;

	// Constructor
	public DemoGui() {
		super("TextField Test Demo");
		Container container = getContentPane();
		container.setLayout(new FlowLayout());
		jtfText1 = new JTextField(10);
		jtfText2 = new JTextField(10);
		container.add(jtfText1);
		container.add(jtfText2);

		setSize(325, 100);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// questo non funziona
		// jtfText2.requestFocusInWindow();

		setVisible(true);

		// questo funziona
		jtfText2.requestFocusInWindow();
	}

	// Main Program that starts Execution
	public static void main(String args[]) {
		new DemoGui();
	}
}
 
Si, infatti il problema era che richiamavo il requestFocus() prima del setVisible(true) ( prima di rendere visibile il JFrame ), grazie per l'aiuto.

Ansi, un'ultima domanda, ho letto su internet, ma non ho provato, che in alcuni casi il requestFocusInWindows() sembra non funzionare, per questo consigliano il requestFocus(), a te risulta questo? in poche parole, quale metodo è consigliabile utilizzare tra i due?
 
Ultima modifica:
Ciao, dalla documentazione http://docs.oracle.com/javase/6/docs/api/java/awt/Component.html#requestFocus()

Leggo che è consigliabile usare requestFocusInWindow perchè il requestFocus non è platform indipendent, il requestFocusInWindow potrebbe fallire (infatti restitusce un booleano).

Io non ho mai avuto problemi con requestFocusInWindow, ma se vuoi essere sicuro puoi fare

Codice:
if(!c.requestFocusInWindow()){
  c.requestFocus();
}

ciao
 

Discussioni simili