Botoes com problemas

10 respostas
J

bem galera eu fiz uma interface grafica so que os butoes nao funcionam as acoes dele me ajudem...

package conversor;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JButton;
//import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Tela extends JFrame implements WindowListener, ActionListener {

    JButton botaoCancelar, botaoConverter, botaoCaminhoC, botaoCaminhoPascal;
    JPanel fundo;
    JLabel labelCamC, labelCamPascal, labelErro;
    JTextField caminhoC, caminhoPascal;

    public Tela() {
        getContentPane().setLayout(null);
        setTitle("Comercio ID");
        setBackground(Color.WHITE);
        setBounds(500, 300, 400, 400);

        fundo = new JPanel();
        fundo.setLayout(null);
        fundo.setBackground(Color.YELLOW);
        fundo.setBounds(0, 0, 400, 400);

        labelCamC = new JLabel("Coloque o caminho do arquivo C:");
        labelCamC.setBounds(0, 10, 200, 25);

        caminhoC = new JTextField("");
        caminhoC.setLayout(null);
        caminhoC.setBackground(Color.white);
        caminhoC.setBounds(0, 35, 250, 25);
        caminhoC.setEnabled(false);

        botaoCaminhoC = new JButton("...");
        botaoCaminhoC.setForeground(Color.red);
        botaoCaminhoC.setBounds(260, 35, 50, 25);

        labelCamPascal = new JLabel("Coloque o caminho do arquivo Pascal:");
        labelCamPascal.setBounds(0, 70, 250, 25);

        caminhoPascal = new JTextField("");
        caminhoPascal.setLayout(null);
        caminhoPascal.setBackground(Color.white);
        caminhoPascal.setBounds(0, 90, 250, 25);
        caminhoPascal.setEnabled(false);

        botaoCaminhoPascal = new JButton("...");
        botaoCaminhoPascal.setForeground(Color.red);
        botaoCaminhoPascal.setBounds(260, 90, 50, 25);

        botaoConverter = new JButton("Converter");
        botaoConverter.setForeground(Color.red);
        botaoConverter.setBounds(0, 170, 100, 25);

        botaoCancelar = new JButton("Cancelar");
        botaoCancelar.setForeground(Color.red);
        botaoCancelar.setBounds(110, 170, 100, 25);

        labelErro = new JLabel("");
        labelErro.setBounds(0, 130, 200, 25);
        labelErro.setForeground(Color.red);

        fundo.add(labelErro);
        fundo.add(labelCamC);
        fundo.add(botaoCancelar);
        fundo.add(botaoConverter);
        fundo.add(botaoCaminhoPascal);
        fundo.add(caminhoPascal);
        fundo.add(labelCamPascal);
        fundo.add(caminhoC);
        fundo.add(botaoCaminhoC);
        getContentPane().add(fundo);
        super.addWindowListener(this);

    }

    public void windowClosed(WindowEvent Evento) {
        this.dispose(); // desalocar objetos da memória
        System.exit(0); // retorna ao Sistema Operacional
    }

    public void windowClosing(WindowEvent Evento) {
    }

    public void windowDeactivated(WindowEvent Evento) {
    }

    public void windowActivated(WindowEvent Evento) {
    }

    public void windowIconified(WindowEvent Evento) {
    }

    public void windowDeiconified(WindowEvent Evento) {
    }

    public void windowOpened(WindowEvent Evento) {
    }

    // Implementação do controle de eventos para botões na interface
    public void actionPerformed(ActionEvent Evento) {
        Object objetoRecebeuEvento;
        objetoRecebeuEvento = Evento.getSource();

        if (objetoRecebeuEvento == botaoCancelar) {
            this.dispose(); // desalocar objetos da memória
            System.exit(0);
        }
        if (objetoRecebeuEvento == botaoCaminhoC) {
        }
        if (objetoRecebeuEvento == botaoCaminhoPascal) {
        }
        if (objetoRecebeuEvento == botaoConverter) {
        }
    }
}

10 Respostas

J

a galera esqueci de falar, sei q os butoes estao sem acao, mas o cancelar nao funciona por nada!!! :shock:

rso1988

joaoroberto_cte,

está faltando “ativar” os listeners dos botões. Adicione esse código:

botaoCancelar.addActionListener(this);
    botaoConverter.addActionListener(this);
    botaoCaminhoC.addActionListener(this);
    botaoCaminhoPascal.addActionListener(this);

[]'s

J

coloquei cara mas mesmo assim nao funciona

package conversor;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JButton;
//import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Tela extends JFrame implements WindowListener, ActionListener {

    JButton botaoCancelar, botaoConverter, botaoCaminhoC, botaoCaminhoPascal;
    JPanel fundo;
    JLabel labelCamC, labelCamPascal, labelErro;
    JTextField caminhoC, caminhoPascal;

    public Tela() {
        getContentPane().setLayout(null);
        setTitle("Comercio ID");
        setBackground(Color.WHITE);
        setBounds(500, 300, 400, 400);

        fundo = new JPanel();
        fundo.setLayout(null);
        fundo.setBackground(Color.YELLOW);
        fundo.setBounds(0, 0, 400, 400);

        labelCamC = new JLabel("Coloque o caminho do arquivo C:");
        labelCamC.setBounds(0, 10, 200, 25);

        caminhoC = new JTextField("");
        caminhoC.setLayout(null);
        caminhoC.setBackground(Color.white);
        caminhoC.setBounds(0, 35, 250, 25);
        caminhoC.setEnabled(false);

        botaoCaminhoC = new JButton("...");
        botaoCaminhoC.setForeground(Color.red);
        botaoCaminhoC.setBounds(260, 35, 50, 25);
        botaoCaminhoC.addActionListener(this);

        labelCamPascal = new JLabel("Coloque o caminho do arquivo Pascal:");
        labelCamPascal.setBounds(0, 70, 250, 25);

        caminhoPascal = new JTextField("");
        caminhoPascal.setLayout(null);
        caminhoPascal.setBackground(Color.white);
        caminhoPascal.setBounds(0, 90, 250, 25);
        caminhoPascal.setEnabled(false);

        botaoCaminhoPascal = new JButton("...");
        botaoCaminhoPascal.setForeground(Color.red);
        botaoCaminhoPascal.setBounds(260, 90, 50, 25);
        botaoCaminhoPascal.addActionListener(this);

        botaoConverter = new JButton("Converter");
        botaoConverter.setForeground(Color.red);
        botaoConverter.setBounds(0, 170, 100, 25);
        botaoConverter.addActionListener(this);

        botaoCancelar = new JButton("Cancelar");
        botaoCancelar.setForeground(Color.red);
        botaoCancelar.setBounds(110, 170, 100, 25);
        botaoCancelar.addActionListener(this);

        labelErro = new JLabel("");
        labelErro.setBounds(0, 130, 200, 25);
        labelErro.setForeground(Color.red);

        fundo.add(labelErro);
        fundo.add(labelCamC);
        fundo.add(botaoCancelar);
        fundo.add(botaoConverter);
        fundo.add(botaoCaminhoPascal);
        fundo.add(caminhoPascal);
        fundo.add(labelCamPascal);
        fundo.add(caminhoC);
        fundo.add(botaoCaminhoC);
        getContentPane().add(fundo);
        super.addWindowListener(this);

    }

    public void windowOpened(WindowEvent e) {
    }

    public void windowClosing(WindowEvent e) {
    }

    public void windowClosed(WindowEvent e) {
        this.dispose();
        System.exit(0);
    }

    public void windowIconified(WindowEvent e) {
    }

    public void windowDeiconified(WindowEvent e) {
    }

    public void windowActivated(WindowEvent e) {
    }

    public void windowDeactivated(WindowEvent e) {
    }

    public void actionPerformed(ActionEvent e) {
        Object objetoRecebeuEvento;
        objetoRecebeuEvento = e.getActionCommand();
        if(objetoRecebeuEvento==botaoCancelar)
        {
            System.out.print("TESTE");
        }
    }
}
rso1988

Tem certeza que essa tela está abrindo? rs

Eu precisei adicionar um setVisible(true) pra ela funcionar. E os eventos funcionaram normalmente.

J

bem cara dentro do pacote eu coloquei assim criei uma class main
e coloquei

package conversor;

public class Main{

    public static void main(String listaArgumentos[]) {
        Tela tela = new Tela();
        tela.setVisible(true);
    }
}

e depois criei uma class Tela que o codigo descrito acima

rso1988

João,

agora entendi seu problema, pelo que você explicou, as actions dos botões não funcionavam, na verdade ele entra no evento, mas não entra no seu IF. Basta alterar pelo código:

public void actionPerformed(ActionEvent e) {  
        if(botaoCancelar == (JButton)e.getSource()) {  
            System.out.print("botaoCancelar ");  
        }  
        if(botaoConverter == (JButton)e.getSource()) {  
            System.out.print("botaoConverter");  
        }
        if(botaoCaminhoC == (JButton)e.getSource()) {  
            System.out.print("botaoCaminhoC");  
        }
        if(botaoCaminhoPascal == (JButton)e.getSource()) {  
            System.out.print("botaoCaminhoPascal");  
        }
    }

[]'s

J

pq o codigo de antes nao dava certo??? poderia me explicar?

rso1988

Opa, claro…

No códido anterior, você estava fazendo “e.getActionCommand();”. Esse método retorna o nome do seu botão, por exemplo, “Cancelar”, então você precisaria comparar as Strings no seu if, assim:

Object objetoRecebeuEvento;  
        objetoRecebeuEvento = e.getActionCommand();  
        if(objetoRecebeuEvento.equals("Cancelar"))  // Compara com o conteúdo dos objetos Strings, ou seja, o texto em si.
        {  
            System.out.print("TESTE");  
        }
        if(objetoRecebeuEvento.equals("Converter"))  // Compara com o conteúdo dos objetos Strings, ou seja, o texto em si.
        {  
            System.out.print("TESTE");  
        }
        if(objetoRecebeuEvento.equals("..."))  // Compara com o conteúdo dos objetos Strings, ou seja, o texto em si.
        {  
            System.out.print("TESTE");  
        }
        .  
        .  
        .

Da forma que eu coloquei, é a forma mais elegante de se fazer isso, pois ao invés de comparar Strings (é mais custoso em questão de performance), compara as referências para os objetos JButton dos seus botões:

if(botaoCancelar == (JButton)e.getSource()) {    // e.getSource() retorna uma referência do botão clicado e compara se é a mesma do seu botão criado  no construtor.
        System.out.print("botaoCancelar ");    
    }

[]'s

J

nossa eu sempre usei o e.getSource, so que foi um erro no digitar … brigadao cara!!

rso1988

Não tem de quê!

Criado 26 de outubro de 2011
Ultima resposta 26 de out. de 2011
Respostas 10
Participantes 2