[RESOLVIDO]como ler o focus?

estou trabalhando numa aplicação e de inicio comecei pelo login,
preciso que o usuário selecione o banco de dados, depois pegue os “funcionários” cadastrados e os liste no 2º JComboBox,
depois de selecionado ele joga o focus dentro do combo de funcionários já preenchido.
depois dele selecionar o funcionário o programa joga pra dentro do JPasswordField.

Quero saber como faço pra verificar se o focus está no password field, pq teria 1 funcionário que não precisa de senha(seria um aprendiz).

Oi,

componente.isFocusable();

Tchauzin!

minha duvida não é se o focus pode ser colocado no componente…
mas sim se o componente está com focus.

no caso precisaria saber se o focus está nele e não se é possível colocar focus nele…

[quote=nebster]minha duvida não é se o focus pode ser colocado no componente…
mas sim se o componente está com focus.

no caso precisaria saber se o focus está nele e não se é possível colocar focus nele…[/quote]

setFocusable(true); // Colocar ou setar foco requestFocus(); // Requisitar o foco ao componente isFocusable(); // Saber se o componente esta com foco.

Ler a API você deve.

[quote=lina]

setFocusable(true); // Colocar ou setar foco requestFocus(); // Requisitar o foco ao componente isFocusable(); // Saber se o componente esta com foco.

Ler a API você deve.[/quote]

na verdade é permissões do focus estes comandos…
tanto que isFocusable() a descrição na API é:

true if this Component is focusable; false otherwise.
“verdadeiro se este componente é focavel; falso em outro casos.”

tanto que eu utilizo assim:

JPasswordField password = (JPasswordField) frmLogin.getContentPane().getComponent(5);
password.grabFocus();

isso sendo que está função é executada quando clico no botão “login”.

no caso se eu utilizar o “isFocusable()” dentro da função ele acessa mesmo que o focus estejá no JComboBox.

Ler a API eu li… mas ajuda ainda não consegui.

Oi,

Então! Na verdade quando você clica no botão e executa a função “login” seu componente não está mais com foco.

A logica correta seria verificar se o Funcionario escolhido precisa digitar uma senha e ai sim requisitar o foco ao componente.

Exemplo:

[code]public class Teste extends JFrame
{
public Teste() {
setSize(500, 500);
setLayout(null);

	final JComboBox primeiro = new JComboBox(new Object[]{"Sem Senha (Convidado)", "Com Senha (Administrador)"});
	primeiro.setBounds(5, 10, 100, 25);
	getContentPane().add(primeiro);
	
	final JTextField segundo = new JTextField();
	segundo.setBounds(5, 50, 100, 25);
	getContentPane().add(segundo);
	
	JButton acao = new JButton();
	acao.setBounds(5, 90, 100, 25);
	acao.addActionListener(
        new ActionListener(){
	        public void actionPerformed(ActionEvent e){
	        	if ("Com Senha (Administrador)".equalsIgnoreCase(primeiro.getSelectedItem().toString())) {
	        		segundo.requestFocus();
	        	}
	        }
	      }
	    );
	getContentPane().add(acao);
}

public static void main(String[] args)
{
	new Teste().setVisible(true);
}

}[/code]

Tchauzin!

O problema é que meu código está assim:

public class Teste extends JFrame
{
	public Teste() {
		setSize(500, 500);
		setLayout(null);
		
		final JComboBox banco = new JComboBox(new Object[]{"Banco 1", "Banco 2"});
		banco.setBounds(5, 10, 100, 25);
		getContentPane().add(banco);
		
		final JComboBox funcionario = new JComboBox(new Object[]{"Novato (Sem Senha)", "Funcionario (Com Senha)"});
		funcionario.setBounds(5, 50, 100, 25);
		getContentPane().add(funcionario);
		
		final JTextField senha = new JTextField();
		senha.setBounds(5, 90, 100, 25);
		getContentPane().add(senha);
		
		JButton acao = new JButton("entrar");
		acao.setBounds(5, 130, 100, 25);
		acao.addActionListener(
	        new ActionListener(){
		        public void actionPerformed(ActionEvent e){
		        	//Verifica se o banco foi selecionado 
		        	if(banco.getSelectedItem() != null){  
		        		funcionario.grabFocus();
		        	}
		        	//Verifica se o funcionario foi selecionado 
		        	if(funcionario.getSelectedItem() != null){  
		        		senha.grabFocus();
		        	}
		        	/*
		        	 aqui deveria verificar se o campo "senha" está com focus 
		        	 */
		        }
		      }
		    );
		getContentPane().add(acao);
	}
	
	public static void main(String[] args)
	{
		new Teste().setVisible(true);
	}
}

Oi,

Então filho. Nesta situação o campo senha nunca estará com o foco. Até porque ele deixou de ter foco quando você pressionou o JButton. Concorda?

A logica mais viável é verificar se este campo senha precisa ser digitado. Se sim, requisite o foco a ele.

Tchauzin!

tem razão…
Obrigado pela ajuda…