Retornar valor no evento ACTIONPERFORMED de um botão

8 respostas
A

Pessoal,

Tenho um método em uma determinada classe, onde crio um JDialog e coloco nele dois botões, um para o “OK” e outro para o “Cancelar”.

Quero que quando o usuário clicar no “OK” ele retorne TRUE e quando for clicado no “Cancelar” seja retornado FALSE.

O fato é que não posso efetuar o “return true” ou “return false” dentro do ACTIONPERFORMED criado para os botões, pois isto não é permitido.

Como faço para que um método retorne um determinado valor ao executar o evento ACTIONPERFORMED de um botão?

Talvez esta dúvida já tenha sido respondida em outro tópico, o fato é que não encontrei uma resposta para a questão e ficarei grato se puderem dar a resposta ou indicar onde posso encontrá-la.

8 Respostas

P

Cara,

Qndo o metodo actionPerfomed eh executado,… ele nao retorna um valor apenas,… mas retorna o objeto q disparou o evento…

vc pode colocar um condicao que verifique o nome do objeto pressionado…

A

Não entendi como isto pode ser feito …

A questão é que este meu método pode ser chamado de vários lugares, e eu quero que ele retorne um valor TRUE ou FALSE para que no local onde este método foi chamado sejam efetuados os devidos tratamentos dependendo do valor retornado…

Por exemplo, é como se o método fosse um OptionDialog, onde o usuário irá selecionar a opção Sim ou Não. Dependendo da opção selecionada o tratamento a ser realizado no local onde este método foi chamado vai ser diferente …

G

Ta parecendo um caso de JOptionPane, se você realmente tem que usar o JDialog, eu sugiro que você crie então uma variável em seu form chamador (esse form chama uma instância de JDialog por exemplo), e você passa como parâmetro essa variável booleana, então a depender da condição, você retornará true ou false.

A

humm… Desculpe a minha ignorância, mas poderia colocar um código exemplificando isto que você mencionou?

Para tentar explicar melhor, abaixo segue o método que estou falando:

protected int exibePergunta(String pTitulo, String pMensagem) {
       
       int opEscolha = NO_OPTION;
       
       CFGManager cfgInstance = CFGManager.getInstance();

       JButton btYes = this.configuraJButton("Sim",'S',new javax.swing.ImageIcon("image/ok.jpg"));
       
       JButton btNo = this.configuraJButton("Não",'N',new javax.swing.ImageIcon("image/cancel.jpg"));
       
       JLabel lbMensagem = this.configuraJText(pMensagem);
       Dimension lbsize = lbMensagem.getPreferredSize();

       JLabel lbImagem = new JLabel();
       lbImagem.setIcon(new javax.swing.ImageIcon("image/question.jpg"));
              
       final JDialog dMensagem = new JDialog();
       dMensagem.setModal(true);
       dMensagem.getContentPane().setLayout(null);
       dMensagem.setTitle(pTitulo);
       dMensagem.getContentPane().add(btYes,null);
       dMensagem.getContentPane().add(btNo,null);
       dMensagem.getContentPane().add(lbMensagem,null);
       dMensagem.getContentPane().add(lbImagem,null);
       
       if (lbsize.getSize().width &lt 370)
          dMensagem.setSize(370, 200);
       else
          dMensagem.setSize((lbsize.getSize().width + 50), 200);
       
       dMensagem.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - dMensagem.getSize().width) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - dMensagem.getSize().height) / 2);
       
       btYes.setBounds((dMensagem.getSize().width / 2) - (btYes.getSize().width + 10),
                       (dMensagem.getSize().height / 2) + (btYes.getSize().height - 15),
                       btYes.getSize().width,
                       btYes.getSize().height);
       btYes.addActionListener(new java.awt.event.ActionListener() {
 				public void actionPerformed(java.awt.event.ActionEvent e) {
                                   // QUERO RETORNAR TRUE			}
 			});
       
       btNo.setBounds((dMensagem.getSize().width / 2) + 10,
                      (dMensagem.getSize().height / 2) + (btNo.getSize().height - 15),
                      btNo.getSize().width,
                      btNo.getSize().height);
       btNo.addActionListener(new java.awt.event.ActionListener() {
                                public void actionPerformed(java.awt.event.ActionEvent e) {
                                   // QUERO RETORNAR FALSE	                }
                        });
 				           
       lbMensagem.setBounds((dMensagem.getSize().width / 2) - (lbsize.getSize().width / 2),
                            (dMensagem.getSize().height / 2) - ((lbsize.getSize().height / 2) + 40),
                            lbsize.getSize().width,
                            lbsize.getSize().height);
       
       lbImagem.setBounds(lbMensagem.getX() - 60,
                          lbMensagem.getY() - 15,
                          32,
                          32);
       
       dMensagem.setVisible(true);
                    
       return opEscolha;
       
    }

Como fazer com que no ACTIONPERFORMED dos botões btYes e btNo eu indique o valor a ser retornado e ele retorne o devido valor para o lugar em que chamou método, fechando o Dialog?

E

Olha Andvenancio , o que eu sugeria é que ao invés de usares o
interface ActionListener devias criar uma classe que implemente esse interface e adicionavas um método que retorne TRUE ou FALSE
consoante o botão pressionado.

Por exemplo:


[color=green][i]class Botoes implements ActionListener{

boolean flag;
public void actionPerformed(ActionEvent e){

if(e.getSource().getName()==btYes){

flag=true;

}else if(e.getSource().getName()==btNo){

flag=false;

}

public  boolean buttonPressed(){

return flag;

}[/i][/color]…

Depois adicione a classe ao addActionListener method.
NOTA:Não é um codigo exacto é somente uma ideia do que poderá fazer,repare que Strings não se comparam usando “==” operator.

A

Beleza, grato pelas dicas.

E

Se houver algum problema não hesite em perguntar.

A

Resolvi utilizando a interface ActionListener mesmo.

Mais uma vez grato pelas dicas!

Criado 14 de agosto de 2006
Ultima resposta 15 de ago. de 2006
Respostas 8
Participantes 4