Teclano com JInternalFrame, to apanhando!

7 respostas
W

Implementei esta classe mas nao estou conseguindo ouvir o evento do teclado, pois quando o usuario pressionar uma tecla o evento deveria exibir uma mensagem, o que nao esta acontecendo, alguem tem uma ideia de como resolver isso ??

public class MakeTelaCadastro extends JInternalFrame implements KeyListener  
{
	private	JToolBar tb_BarraAcima;
	private	JToolBar tb_BarraAbaixo;
	private	JPanel p_Painel;
	private	JPanel p_BarraAcima;
	private	JPanel p_BarraAbaixo;
	private	JScrollPane sp_Scroll;
	
	private 	JLabel l_Codigo;
	public  	JFormattedTextField ftf_Codigo;
	public  	JButton b_Executar;
	public 	JButton b_Consultar;
	public 	JButton b_Fechar;
	
	public JButton b_Incluir;
	public JButton b_Cancelar;
	public JButton b_Gravar;
	public JButton b_Excluir;
	
	protected FieldMask fm;
	
	int linha;
	
	public MakeTelaCadastro ()
	{		
		addKeyListener(this);
		
		fm = new FieldMask();
		
		p_BarraAcima 	= new JPanel();
		p_BarraAcima.setLayout(null);
		
		l_Codigo 		= new JLabel("Código :");
		p_BarraAcima.add (l_Codigo);
		l_Codigo.setBounds (10, 8, 60, 15);
		
		ftf_Codigo		= new JFormattedTextField(fm.formato_Codigo);
		ftf_Codigo.setToolTipText("Informe o código");
		ftf_Codigo.setFocusLostBehavior(JFormattedTextField.COMMIT);
		p_BarraAcima.add(ftf_Codigo);
		ftf_Codigo.setBounds(70, 5, 128, 20);
		
		b_Executar		= new JButton();
		b_Executar.setText("Executar");
		b_Executar.setToolTipText("Clique aqui para executar a consulta no campo código");
		p_BarraAcima.add(b_Executar);
		b_Executar.setBounds(210, 3, 130, 25);
		
		b_Consultar		= new JButton();
		b_Consultar.setText("F5 - Consultar");
		b_Consultar.setToolTipText("Clique aqui para exibir a tela de consulta");
		p_BarraAcima.add(b_Consultar);
		b_Consultar.setBounds(345, 3, 130, 25);
		
		ButtonHandler handler = new ButtonHandler();
		
		b_Fechar		= new JButton();
		b_Fechar.setText("Fechar");
		b_Fechar.setToolTipText("Clique aqui para fechar a tela");
		p_BarraAcima.add(b_Fechar);
		b_Fechar.addActionListener(handler);
		b_Fechar.setBounds(480, 3, 130, 25);
				
		
		
		p_BarraAbaixo	= new JPanel();
		p_BarraAbaixo.setLayout(null);
		
		b_Incluir		= new JButton();
		b_Incluir.setText("<INS> - Incluir");
		b_Incluir.setToolTipText("Clique aqui para incluir um registro");
		p_BarraAbaixo.add(b_Incluir);
		b_Incluir.setBounds(10, 3, 130, 25);
		
		b_Cancelar		= new JButton();
		b_Cancelar.setText("F3 - Cancelar");
		b_Cancelar.setToolTipText("Clique aqui para cancelar a operação");
		p_BarraAbaixo.add(b_Cancelar);
		b_Cancelar.setBounds(145, 3, 130, 25);
		
			
		b_Gravar			= new JButton();
		b_Gravar.setText("F2 - Gravar");
		b_Gravar.setToolTipText("Clique aqui para gravar o registro");
		p_BarraAbaixo.add(b_Gravar);
		b_Gravar.setBounds(280, 3, 130, 25);
		//b_Gravar.getInputMap().put(KeyStroke.getKeyStroke("F2"), "doSomething");
		//b_Gravar.getActionMap().put("doSomething", anAction);
		
		
		b_Excluir		= new JButton();
		b_Excluir.setText("F4 - Excluir");
		b_Excluir.setToolTipText("Clique aqui para excluir o registro");
		p_BarraAbaixo.add(b_Excluir);
		b_Excluir.setBounds(415, 3, 130, 25);
		
		tb_BarraAcima 	= new JToolBar();
		tb_BarraAcima.setPreferredSize (new Dimension (10,35));
		tb_BarraAcima.add(p_BarraAcima);
		getContentPane().add(tb_BarraAcima, BorderLayout.NORTH );
		
		
		tb_BarraAbaixo = new JToolBar();
		tb_BarraAbaixo.setPreferredSize (new Dimension (10,35));
		tb_BarraAbaixo.add(p_BarraAbaixo);
		getContentPane().add(tb_BarraAbaixo, BorderLayout.SOUTH );
		
		p_Painel		= new JPanel();
		p_Painel.setLayout (new GridBagLayout());
		
		
		sp_Scroll 	= new JScrollPane();
		sp_Scroll.setAutoscrolls(true);
		sp_Scroll.setViewportView (p_Painel);
		getContentPane().add (sp_Scroll, BorderLayout.CENTER);
		
		
		setClosable  (true);
		setResizable (true);
		setMaximizable(true);
		setIconifiable(true);
		linha = 0;						
	}
	
	public void keyPressed (KeyEvent e)
	{
		JOptionPane.showMessageDialog (null, "Teste", "Aviso", JOptionPane.ERROR_MESSAGE);
	}
	
	public void keyReleased (KeyEvent e)
	{
		
	}
	
	public void keyTyped (KeyEvent e)
	{
		
	}
	
	public void add (String label, JComponent componente)
	{
		
			
		GridBagConstraints cons = new GridBagConstraints();
		cons.fill 	= GridBagConstraints.NONE;
		cons.anchor	= GridBagConstraints.NORTHWEST;
		cons.insets	= new Insets (4,4,4,4);
		
		cons.gridy		= linha++;
		cons.weightx 	= 0;
		cons.gridwidth	= 1;
		p_Painel.add (new JLabel(label), cons);
		
		cons.fill 		= GridBagConstraints.BOTH;
		cons.weightx	= 1;
		cons.gridwidth	= GridBagConstraints.REMAINDER;
		p_Painel.add(componente, cons);
	}
	
	
	public void add (String label, JScrollPane componente)
	{
		GridBagConstraints cons = new GridBagConstraints();
		cons.fill 	= GridBagConstraints.NONE;
		cons.anchor	= GridBagConstraints.NORTHWEST;
		cons.insets	= new Insets (4,4,4,4);
		cons.weighty = 1;
		cons.gridheight = GridBagConstraints.REMAINDER;
		
		cons.gridy		= linha++;
		cons.weightx 	= 0;
		cons.gridwidth	= 1;
		p_Painel.add (new JLabel(label), cons);
		
		cons.fill 		= GridBagConstraints.BOTH;
		cons.weightx	= 1;
		cons.gridwidth	= GridBagConstraints.REMAINDER;
		p_Painel.add(componente, cons);
	}
	
	public void add (String label, JComponent componente, String label2, 
			JComponent component2)
	{
		GridBagConstraints cons = new GridBagConstraints();
		cons.fill 	= GridBagConstraints.NONE;
		cons.insets	= new Insets (4,4,4,4);
		cons.anchor	= GridBagConstraints.NORTHWEST;
		
		
		cons.gridy		= linha++;
		cons.weightx 	= 0;
		cons.gridwidth	= 1;
		p_Painel.add (new JLabel(label), cons);
		
		cons.fill 		= GridBagConstraints.BOTH;
		cons.weightx	= 1;
		cons.gridwidth	= 1; 
		p_Painel.add(componente, cons);
		
		// ----------------------------------------------------------------------
		cons.fill 		= GridBagConstraints.NONE;
		cons.weightx	= 0;
		cons.gridwidth	= 1;
		p_Painel.add(new JLabel(label2), cons);
		
		cons.weightx 	= 1;
		cons.fill		= GridBagConstraints.BOTH;
		cons.gridwidth = GridBagConstraints.REMAINDER;
		p_Painel.add(component2, cons);
	}
	
	
	public void add (String label, JComponent componente, JComponent component2, 
			JComponent component3)
	{
		GridBagConstraints cons = new GridBagConstraints();
		cons.fill 	= GridBagConstraints.NONE;
		cons.insets	= new Insets (4,4,4,4);
		cons.anchor	= GridBagConstraints.NORTHWEST;
		
		
		cons.gridy		= linha++;
		cons.weightx 	= 0;
		cons.gridwidth	= 1;
		p_Painel.add (new JLabel(label), cons);
		
		cons.fill 		= GridBagConstraints.BOTH;
		cons.weightx	= 1;
		cons.gridwidth	= 1; 
		p_Painel.add(componente, cons);
		
		// ----------------------------------------------------------------------
		
		cons.weightx 	= 1;
		cons.fill		= GridBagConstraints.NONE;
		cons.gridwidth = 1;
		p_Painel.add(component2, cons);
		
		cons.weightx	= 1;
		cons.gridwidth	= 1;
		cons.fill		= GridBagConstraints.BOTH;
		p_Painel.add(component3, cons);
		
	}
	
	
	private class ButtonHandler implements ActionListener
	{
		public void actionPerformed (ActionEvent e)
		{
			if (e.getSource() instanceof JButton)
			{
				JButton bt = (JButton) e.getSource();
				if (bt.getText().equals("Fechar"))
					dispose();
			}
		}
		
		
	}

}

7 Respostas

F

tu esta colocando o KeyListener no JInternalFrame?
nao seria alguns dos teus componentes dentro dele?

W

Como assim, naum entendi direito ???

F

assim oh…
tu ta precisando saber qdo ele esta teclando certo?

isso num TextField?

B

cara … se vc precisa “ouvir” quando o usuario digita algo no textfiield vc deve adciona-lo ao keylistener … entendeu …
vc adciona ao listener o componente que deseja observar … entendeu ?

W

Entendi, mas naum é bem isso que eu quero !

O que eu quero fazer é programar teclas como F2, F3, F4, etc, para realizarem algum processamento, como por exemplo quando o usuario tecla F2 o sistema deverá salvar os dados, o problema e que naum estou conseguindo fazer o sistema ouvir o evento quando o usuario digita algo no form, ao digitar qualquer tecla o evento keyPressed nao e acionado, esse e o problema !

D

Olá galera!!!

Corrijam-me se estiver falando abobrinha, mesmo porque nunca trabelhei e nem ao menos ouvi falar de JInternalFrame, mas primeiro vc precisa saber se o componente ao qual vc está declarando como o ouvinte de eventos pode receber o foco, pois para eventos de teclas pressionadas é necessário q’ o componente possa receber o foco. por exemplo para q’ um frame possa receber o evento de pressionamento de teclas, é necessário sobrepor o método isFocusable, retornado true, da class JFrame. tipo:

class SuaClass extends JFrame {
public SuaClass() {
bláhbláh....bláh
}

public boolean isFocusable() {
    return true ;
}

}

Certo?!

Forte abraço a todos.

W

Consegui uma boa solução para o meu problema, vejam o código:

KeyStroke ks_f2 	= KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0, true);
				
		getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(ks_F2,"Salvar");
getRootPane().getActionMap().put("Salvar",new AbstractAction () {
	public void actionPerformed (ActionEvent ae)
			{
				Gravar(); 
			}
		});

Muito obrigado a todos que enviaram suas dicas !

Criado 18 de março de 2005
Ultima resposta 22 de mar. de 2005
Respostas 7
Participantes 4