Re:ActionListener

essas sao as famosas “anonymous inner class” e, para evita-las, vc pode ou criar classes nomeadas (??) ou fazer a sua classe implementar o ActionListener e usar addActionListener (this).

a mesma coisa que vc colocou na sua anonymous inner class…
tome cuidado que se um objeto for registrado como EventListener de vários componentes, vc deve ver qual o componente que fez a acao e tomar a atitude certa…
soh uma coisa: pq q vc nao quer usar os $1, $2, etc?

[quote=diogormelo][quote=takeshi10]a mesma coisa que vc colocou na sua anonymous inner class…
tome cuidado que se um objeto for registrado como EventListener de vários componentes, vc deve ver qual o componente que fez a acao e tomar a atitude certa…
soh uma coisa: pq q vc nao quer usar os $1, $2, etc?[/quote]
Se eu for usar os $1, $2, etc vai gerar mais de $50, se tem como evitar, fica melhor…
Eu procurei na net em como fazer esse esquema mas não consegui.
Se eu usar a mesma coisa do anonymous inner class, ele aparece direto, sem nem preicsar clicar no jButton.[/quote]

qual esquema q vc procurou na net? e o qq aparece direto sem precisar clicar no jButton?

eu sugeri a vc implementar o ActionListener no seu frame (ou ainda em qualquer outra classe)

dentro do metodo, vc deve verificar o evento e reagir de acordo…

Dá uma olhada…

[code]
import java.awt.;
import java.awt.event.
;

import javax.swing.*;

public class SeuFrame extends JFrame implements ActionListener {

private JButton btn1;
private JButton btn2;

public SeuFrame() {

    super( "Olá!" );
    setLayout( new FlowLayout() );

    btn1 = new JButton( "Botão 1" );
    btn2 = new JButton( "Botão 2" );

    btn1.addActionListener( this );
    btn2.addActionListener( this );

    add( btn1 );
    add( btn2 );

}
 
public void actionPerformed( ActionEvent e ) {

    // verificando qual botão gerou o evento...
    if ( e.getSource() == btn1 ) {
    
        // código p/ tratar o btn1

    } else if ( e.getSource() == btn2 ) {

        // código p/ tratar o btn2

    }

    .
    .
    .
    .

}

}[/code]
Entendeu agora? Use o método getSource() de ActionEvent para verificar o componente que gerou o evento.

Falow!

Pessoal, dentro de um jDesktopPane tem um jButton, esse jButton tem a ação de abrir (dentro do jDesktopPane) um jInternalFrame chamado Cadastro. Tá funcioanando normal, só que eu tenho vários casos como este na minha aplicação, e o “problema” é que quando eu compilo ele gera o nome da minha aplição + $1 e assim por diante, por exemplo, se eu criar 3 jButtons como abaixo, ele vai gerar MinhaAplicacao$1.class MinhaAplicacao$2.class MinhaAplicacao$3.class além da MinhaAplicacao.class
Como eu posso fazer essas ações nesses jButtons sem ter que gerar um .class para cada um?

jButton.addActionListener(
    new ActionListener(){
        public void actionPerformed (ActionEvent e)
        {
            frameCadastro = new cadCFrel();
            jDesktopPane.add(frameCadastro);
            frameCadastro.setVisible(true);
        }

Valeu

Pronto! Minha aplicação já está implementando o ActionListener e o jButton já está como jButton.addActionListener(this); mas… o que eu coloco no

[code]public void actionPerformed(ActionEvent arg0) {

}
[/code]
pra quando eu clicar no jButton ele abrir a jInternalFrame?

Muito obrigado

[quote=takeshi10]a mesma coisa que vc colocou na sua anonymous inner class…
tome cuidado que se um objeto for registrado como EventListener de vários componentes, vc deve ver qual o componente que fez a acao e tomar a atitude certa…
soh uma coisa: pq q vc nao quer usar os $1, $2, etc?[/quote]
Se eu for usar os $1, $2, etc vai gerar mais de $50, se tem como evitar, fica melhor…
Eu procurei na net em como fazer esse esquema mas não consegui.
Se eu usar a mesma coisa do anonymous inner class, ele aparece direto, sem nem preicsar clicar no jButton.

Então… eu coloquei o jButton.addActionListener(this) e as ações que eu estava usando no jButton antes dentro da
public void actionPerformed(ActionEvent arg0) {

}
Mas quando eu fiz isso, o jInternalFrame já aparece direto na tela, sem precisar chamar através do jButton

Esse é o problema, eu sou bem leigo em java ainda…
Não sei como fazer isso, desculpe a ignorância, mas se puder dar uma força, eu agradeço

valeu pela resposta davidbuzatto

Essa parte não tem problema. Estou com problemas aqui:

	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if ( e.getSource() == jButton ) {
			frameCadastro = new cadCFrel();
			jDesktopPane.add(frameCadastro);
			frameCadastro.setVisible(true);
			frameCadastro.show();
			}
		}

O jInternalFrame já aparece na tela sem precisar clicar no jButton

Dentro de um Applet tenho um jMenuBar(com alguns jMenuItem’s) e um jDesktopPane(com alguns jButton’s). Os jMenuItem’s tem a função de, quando clicados, abrir seu respectivo jInternalFrame(do pacote "cadastro’) que já está criado, assim como os jButtons que estão no jDesktopPane.
Para cada jMenuItem eu fiz o seguinte:

private JMenuItem getJMenuItem() { if (jMenuItem == null) { jMenuItem = new JMenuItem(); jMenuItem.setText("Relação"); jMenuItem.addActionListener( new ActionListener(){ public void actionPerformed (ActionEvent e) { frameCadastro = new cadCFrel(); jDesktopPane.add(frameCadastro); frameCadastro.setVisible(true); frameCadastro.show(); } } ); } return jMenuItem; }
Assim funciona, mas o problema é que são vários jMenuItem’s e jButton’s, e para cada um deles a compilação gera o nome da minha classe com “$+número_sequencial”, por exemplo, para o jMenuItem1 ele gera MinhaAplicacao$1.class e assim por diante…
Eu Tentei usar:

... import cadastro.cadCFrel; public class index extends Applet implements ActionListener { ... private cadCFrel frameCadastro; ... //jMenuItem private JMenuItem getJMenuItem() { if (jMenuItem == null) { jMenuItem = new JMenuItem(); jMenuItem.setText("Relação"); jMenuItem.addActionListener(this); } return jMenuItem; } //Ação public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if ( e.getSource() == jButton ) { frameCadastro = new cadCFrel(); jDesktopPane.add(frameCadastro); frameCadastro.setVisible(true); } }
Fazendo isso, o frame é criado automaticamente(frameCadastro = new cadCFrel()), sem precisar clicar no jMenuItem.
Estou utilizando o Eclipse com Visual Editor.
Desde já agradeço pela ajuda.

Acho que descobri… Tenho que criar uma única classe para abrir o respectivo jInternalFrame. Nesse exemplo que fiz, ele só abre o jInternalFrame chamado cadCFrel

private cadCFrel getFrameCadastro() { if (frameCadastro == null) { frameCadastro = new cadCFrel(); frameCadastro.setVisible(false); frameCadastro.enable(false); } return frameCadastro; }
Só que com isso, ele só vai abir o jInternalFrame cadCFrel.
Como eu faço para uma só classe abrir o respectivo jInternalFrame?