Oi a todos…
Criei um componente que extende JComponent e implementa ComponentListener, ActionListener e FocusListener. Tudo funciona direitinho dentro do componente. Como faço para capturar os listeners do componente na minha aplicação???
:roll:
Valeu!!!
dango
Junho 25, 2004, 9:37am
#2
A classe JComponent implementa um método getListeners(). Talvez se você sobrepor esse método e fazer ele retornar os listeners registrados no seu componente de acordo com a classe deles.
Quando você usa algum método do tipo addXXXXListener() provavelmente você está guardando esses objetos interessados em receber as notificações em um ArrayList ou Vector. Daí fica relativamente simples implementar (sobrepor, na verdade) getListeners().
Será que é isso que você quer?
E ai Dango…
Eu tentei a dica que vc deu mas não virou…
Vou postar o código para ver se dá p/ entender.
Componente:[code]
public class FormattedField extends JComponent implements ComponentListener, FocusListener {
//Declaração de variáveis
private JFormattedTextField txt; //Text
private JLabel lbl; //Label
private TagPesquisa pesq; //Tag de pesquisa
private boolean tag; //Adiciona tag de pesquisa
//Construtor
public FormattedField(String mascara, boolean pesquisa, String label){
setLayout(null);
initTxt(mascara);
if (pesquisa){
tag = pesquisa;
initTag();
}
if (label != null){
initLbl(label);
}
addComponentListener(this);
}
private void initTxt(String mascara){
txt = new JFormattedTextField(Formato.criaMascara(mascara));
txt.setFont(Formato.TEXT_FONT);
txt.setOpaque(false);
txt.setBorder(Formato.FIELD_BORDER);
add(txt);
//Evento que dispara a tecla PAGE DOWN para a pesquisa
txt.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent evt) {
int intKey = evt.getKeyCode();
if (intKey == KeyEvent.VK_PAGE_DOWN){
System.out.println("Down!!!");
}
}
public void keyReleased(KeyEvent arg0) {}
public void keyTyped(KeyEvent arg0) {}
});
txt.addFocusListener(this);
}
private void initLbl(String texto){
lbl = new JLabel(texto);
lbl.setFont(Formato.LABEL_FONT);
lbl.setForeground(Formato.FORE_LABEL);
add(lbl);
}
private void initTag(){
pesq = new TagPesquisa();
add(pesq);
}
public void componentHidden(ComponentEvent arg0) {}
public void componentMoved(ComponentEvent arg0) {}
public void componentResized(ComponentEvent arg0) {
int l = arg0.getComponent().getWidth();
int a = arg0.getComponent().getHeight();
//sobrescreve a altura informada para o componente
arg0.getComponent().setSize(l,33);
//Fixa a altura dos objetos dentro do componente
txt.setSize(l, 16);
if(tag) pesq.setLocation(l-14, 1);
if(lbl != null) lbl.setBounds(0,16,l,15);
}
public void componentShown(ComponentEvent arg0) {}
public void setText(String texto){
txt.setText(texto);
}
public String getText(){
return txt.getText();
}
public void setFont(Font fonte){
txt.setFont(fonte);
}
public void focusGained(FocusEvent arg0) {
txt.setBorder(Formato.FOCUS_BORDER);
}
public void focusLost(FocusEvent arg0) {
txt.setBorder(Formato.FIELD_BORDER);
}
}
[/code]
....
cnpj = new FormattedField(Formato.FORMATO_CNPJ, true, "CNPJ");
cnpj.setBounds(10, 10, 136, 30);
cnpj.addKeyListener(this);
....
O que acontece é que não dispara nehum evento do keyListener fora do componente. Já dentro do componente funciona (como por exemplo page down.