Duvida no JButton [Resolvido]

15 respostas
Nivekzin
Opa, estou aqui denovo !! :D bem minha duvida é a seguinte ... eu criei 2 JButton pro meu programa, no caso seriam = a todo programa que vemos com aqueles 2 botões embaixo (Ok e Cancelar) eu queria saber o comando para que o OK confirme todos os dados digitados na tela e volte a tela anterior , no caso essa parte do programa será chamado por uma outra classe... e o cancelar apenas volte pro inicio e não feche o programa !!
public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == addButton)
        {
            Desire novo = new Desire();
            novo.setVisible(true);
            novo.setResizable(false);
            //vetor.addElement(novo);
        }

    }

No caso é essa classe sendo chamada, agora vou por a do JButton

public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == okButton)
        {
           setName(name);
           setAddress(address);
           setEmail(email);
           setTel(tel);
           setBirth(birthday);
           setCPF(cpf);
           setRG(rg);

        }
        else
        {
            ;
        }

    }
Seria nessa parte em que armazenaria oque foi digitado e voltaria pra tela inicial e o cancel ainda nao tenho noção do que por, porque euy tinha posto System.exit(0); só que fechava todo o programa!! Se alguem poder ajudar nessa duvida! Grato a todos!

15 Respostas

pgioseffi

Acho que isso resolve seu problema:

private void tomarDecisao() {
    final int decisao = JOptionPane.showOptionDialog(this, "Deseja realmente sair?", StringConstants.GLOBAL_TITULO_SISTEMA, JOptionPane.YES_NO_OPTION,
                                                     JOptionPane.QUESTION_MESSAGE, null, null, null);
    switch (decisao) {
        case JOptionPane.YES_OPTION:
            // Implemente aqui o código para o botão "Sim", como o exemplo abaixo.
            this.acaoBotaoSim();
            break;
        case JOptionPane.NO_OPTION:
            // Implemente aqui o código para o botão "Não", como o exemplo abaixo.
            this.acaoBotaoNao();
        case JOptionPane.CANCEL_OPTION:
            // Implemente aqui o código para o botão "Cancelar", como o exemplo abaixo.
            this.acaoBotaoCancelar();
        default:
            /*
             * Desnecessário, como os 3 casos já estão mapeados, você não precisa de default, no entanto, você pode eleminar um dos casos acima e jogá-lo aqui como 
             * como decisão padrão dos seus botões.
             */
            this.acaoBotaoCancelar();
            break;
    }
}
Nivekzin

hm, o que você falou esta certo + no meu caso seria algo diferente, pois no caso não seria uma janela pra sair, seria no caso assim, eu tenho 1 botão em 1 JFrame que vai chamar uma outra classe que abrirá uma nova janela que conterá fields para cadastro, então no caso acredito que não seria implementado switch e sim algum action (Acredito eu) para tal coisa, como se fosse por exemplo assim

if(e.getSource == buttonOK)
{
//pegará todos os campos digitados e será alocado cada elemento numa variável
}
else
{
//no caso do cancel
return inicio();
}
//acredito que não seja uma função aqui também e sim algum comando que apenas saia da janela que estou!

Espero que tenha sido claro…

pgioseffi

Entendi agora. Bom, você vai ter que implementar um KeyListener para cada botão seu, como por exemplo:

private JButton getBotaoSair() {
    if (this.botaoSair == null) {
        this.botaoSair = new JButton("<html><u>S</u>air</html>");
        this.botaoSair.setBounds(new Rectangle(535, 330, 58, 25));
        this.botaoSair.addKeyListener(new KeyListener() {
            public void keyPressed(final KeyEvent e) {
                if ((e.getKeyCode() == KeyEvent.VK_ENTER) || (e.getKeyCode() == KeyEvent.VK_S)) {
                    // Aqui você implementa o código.
                    NomeDaSuaClasse.this.acaoBotaoSair();
                }
            }

            public void keyReleased(final KeyEvent e) {
                /*
                 * Sem necessidade de implementação, mas a API declara estes métodos em sua interface, então existe a necessidade da sua assinatura aqui sem código.
                 */
            }

            public void keyTyped(final KeyEvent e) {
                /*
                 * Sem necessidade de implementação, mas a API declara estes métodos em sua interface, então existe a necessidade da sua assinatura aqui sem código.
                 */
            }
        });

        this.botaoSair.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent e) {
                NomeDaSuaClasse.this.acaoBotaoSair();
            }
        });
    }
    return this.botaoSair;
}

Se o botão de cancelar não faz nada, não implemente o KeyListener nem o ActionListener nele.

Se com isso ele ficar sem ação, implemente como o código acima dando apenas um return; nele.

Caso seja uma janela é só você lançar: this.botaoSair.getParent().setVisible(false);

Nivekzin

hm, ve se essa imagem vai ajudar a visualizar ± o que eu to falando…

Uploaded with ImageShack.us

Agora vamos la… Aquele adicionar ali em cima abre essa Frame de cadastro no caso as “actions” que eu queria era para essas outros 2 buttons (OK e Cancel) deu pra entender melhor?

pgioseffi

Então, faz o que eu te falei ali, implementa o KeyListener e o ActionListener nos seus botões.

Implementa o código do botão “OK”, implementa o código do botão “Cancelar” e como última instrução dos dois botões você coloca a chamada de um método que vai sumir com esse teu frame que seria assim:

private void fechaJanela() {
    this.dispose();
}
Nivekzin

aaa entendi!! vou tentar aqui e verei !!! obrigado mesmo!!

Nivekzin

Ai cara deu esse erro aqui…

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
        at java.lang.Integer.parseInt(Integer.java:470)
        at java.lang.Integer.parseInt(Integer.java:499)
        at Comum.Desire.setTel(Desire.java:174)
        at Comum.Desire.actionPerformed(Desire.java:205)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6289)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6054)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4652)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4482)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4482)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
        at java.awt.EventQueue.access$000(EventQueue.java:85)
        at java.awt.EventQueue$1.run(EventQueue.java:603)
        at java.awt.EventQueue$1.run(EventQueue.java:601)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
        at java.awt.EventQueue$2.run(EventQueue.java:617)
        at java.awt.EventQueue$2.run(EventQueue.java:615)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

O que poderá ser?? é a String dos JTextFields?

pgioseffi

Resolveu?

pgioseffi

Sim!

É a string de um dos JTextField que espera apenas números. Você tem que fazer um tratamento para quando o dado vier em branco.

Nivekzin

Vai o código completo da classe… talvez ajude a você ver o que possa estar errado

class Desire extends JFrame implements ActionListener
{

    //Variable Declaration
    private String name;
    private String email;
    private String address;
    private String telString;
    private String birthString;
    private String cpfString;
    private String rgString;
    private int tel;
    private int birthday;
    private int cpf;
    private int rg;

    //JTextField
    private JTextField nameField;
    private JTextField emailField;
    private JTextField addressField;
    private JTextField telField;
    private JTextField birthField;
    private JTextField cpfField;
    private JTextField rgField;

    //JLabel
    private JLabel nameLabel;
    private JLabel emailLabel;
    private JLabel addressLabel;
    private JLabel telLabel;
    private JLabel birthLabel;
    private JLabel cpfLabel;
    private JLabel rgLabel;

    //JButton
    private JButton okButton;
    private JButton cancelButton;

    //JCheckBox
    private JRadioButton sex;

    public Desire()
      {
        super("Cadastro");
        this.setLayout(null);
        this.setBounds(350, 350, 600, 450);

        Container cp = getContentPane();

        nameLabel = new JLabel("Nome:");
        nameLabel.setBounds(10, 50, 100, 100);
        nameLabel.setVisible(true);
        nameField = new JTextField();
        nameField.setBounds(10, 110, 140, 30);
        name = nameField.getText();

        emailLabel = new JLabel("Email:");
        emailLabel.setBounds(10, 110, 100, 100);
        emailField = new JTextField();
        emailField.setBounds(10, 170, 140, 30);
        email = emailField.getText();

        addressLabel = new JLabel("Endereço:");
        addressLabel.setBounds(10, 170, 100, 100);
        addressField = new JTextField();
        addressField.setBounds(10, 230, 140, 30);
        address = addressField.getText();

        telLabel = new JLabel("Telefone:");
        telLabel.setBounds(10, 230, 100, 100);
        telField = new JTextField();
        telField.setBounds(10, 290, 140, 30);
        telString = telField.getText();

        birthLabel = new JLabel("Data de Nascimento:");
        birthLabel.setBounds(10, 290, 120, 100);
        birthField = new JTextField();
        birthField.setBounds(10, 350, 140, 30);
        birthString = birthField.getText();

        okButton = new JButton("OK");
        okButton.setBounds(365, 380, 100, 25);
        okButton.addActionListener(this);

        cancelButton = new JButton("Cancel");
        cancelButton.setBounds(475, 380, 100, 25);
        cancelButton.addActionListener(this);

        cp.add(nameLabel);
        cp.add(nameField);
        cp.add(emailLabel);
        cp.add(emailField);
        cp.add(addressLabel);
        cp.add(addressField);
        cp.add(telLabel);
        cp.add(telField);
        cp.add(birthLabel);
        cp.add(birthField);
        cp.add(okButton);
        cp.add(cancelButton);



    }

    //Getters & Setters
    public String getName()
    {
        return name;
    }

    public String getAddress()
    {
        return address;
    }

    public String getEmail()
    {
        return email;
    }

    public int getTel()
    {
        return tel;
    }

    public int getBirth()
    {
        return birthday;
    }

    public int getCPF()
    {
        return cpf;
    }

    public int getRG()
    {
        return rg;
    }
    public void setName(String name)
    {
        this.name = name;
    }

    public void setEmail(String email)
    {
        this.email = email;
    }

    public void setAddress(String address)
    {
        this.address = address;
    }

    public void setTel(int tel)
    {
        tel = Integer.parseInt(telString);
        this.tel = tel;
    }

    public void setBirth(int birthday)
    {
        birthday = Integer.parseInt(birthString);
        this.birthday = birthday;
    }

    public void setCPF(int cpf)
    {
        cpf = Integer.parseInt(cpfString);
        this.cpf = cpf;
    }

    public void setRG(int rg)
    {
        rg = Integer.parseInt(rgString);
        this.rg = rg;
    }

  

    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == okButton)
        {
           setName(name);
           setAddress(address);
           setEmail(email);
           setTel(tel);
           setBirth(birthday);
           setCPF(cpf);
           setRG(rg);
           fechaJanela();
        }
        else
        {
            fechaJanela();
        }

    }

    private void fechaJanela()
    {
        this.dispose();
    }

    /*public static void main(String[] args)
    {
        Desire novo = new Desire();
        novo.setVisible(true);
        novo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        novo.setResizable(false);

    }*/
}
pgioseffi

Então Nivekzin,

Seus métodos modificadores estão bem estranhos, você faz isso aqui, por exemplo:

public void setCPF(int cpf) {
    cpf = Integer.parseInt(cpfString);
    this.cpf = cpf;
}

Seu código não fez o menor sentido pra mim, cara! Você está tentando jogar um valor do intrínseco int no seu cpf que também é int, até aí correto, mas pegando de uma String que nem é utilizada. Ela sempre estará branca ou nula.

Você não precisa dessas Strings nem dos ints, apenas dos JTextFields da tela.

Daí na hora de persistir no banco você realiza as operações em cima do método getText() de cada um desses JTextField.

Por exemplo:

Se você precisa persistir o CPF como um número faça a validação na hora de persistir. Ao pressionar o botão OK, manda ele chamar um método que valide os campos, mais ou menos assim:
public boolean validaCampos() {
    final String nome = this.nameField.getText();
    final String email = this.nameField.getText();
    final String endereco = this.nameField.getText();
    final String telefone = this.nameField.getText();
    final String dataNascimento = this.nameField.getText();
    final String cpf = this.nameField.getText();
    final String rg = this.nameField.getText();

    if (Util.isBlankOrNull(nome) || Util.isBlankOrNull(email) || Util.isBlankOrNull(endereco) || Util.isBlankOrNull(telefone) || Util.isBlankOrNull(dataNascimento) ||
        Util.isBlankOrNull(cpf) || Util.isBlankOrNull(cpf)) {
        JOptionPane.showMessageDialog(this, "Nenhum campo pode estar em branco.");
        return false;
    }

    if (!Util.validaData(dataNascimento)) {
        JOptionPane.showMessageDialog(this, "Data de nascimento inválida. Utiliza o padrão dd/mm/aaaa");
        return false;
    }

    if (!Util.validaNumerosInteiros(cpf) || !Util.validaNumerosInteiros(rg)) {
        JOptionPane.showMessageDialog(this, "CPF ou RG inválidos");
        return false;
    }

    if (!Util.validaEmail(email)) {
        JOptionPane.showMessageDialog(this, "E-mail inválido");
        return false;
    }

    // Validando o CPF segundo as normas governamentais
    if (!Util.validaCPF(cpf)) {
        JOptionPane.showMessageDialog(this, "CPF inválido");
        return false;
    }
    return true;
}

Daí depois é só criar uma classe chamada Util, mais ou menos assim:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.regex.Pattern;

public final class Util {

    public static boolean isBlankOrNull(final String str) {
        return (str == null) || (str.trim().length() == 0);
    }

    public static boolean validaEmail(String email) {
        return Pattern.compile(".+@.+\.[a-z]+").matcher(email).matches();
    }

    public static boolean validaNumerosInteiros(final String string) {
        // Substituo na string tudo que for diferente de número.
        final String seuCampo = string.replace("\D", "");
        try {
            Integer.parseInt(seuCampo);
        } catch (final NumberFormatException e) {
            return false;
        }
        return true;
    }

    public static boolean validaCPF(final String cpf) {
        if (cpf == null || cpf.length() != 11) {
            return false;
        }
        final String numDig = cpf.substring(0, 9);
        if (numDig.equals("000000000") || numDig.equals("111111111") || numDig.equals("222222222") || numDig.equals("333333333") || numDig.equals("444444444") ||
            numDig.equals("555555555") || numDig.equals("666666666") || numDig.equals("777777777") || numDig.equals("888888888") || numDig.equals("999999999")) {
            return false;
        }
        int soma = 0, peso = 10;
        for (int i = 0; i < numDig.length(); i++) {
            soma += Integer.parseInt(numDig.substring(i, i + 1)) * peso--;
        }
        Integer primDig, segDig;
        if (soma % 11 == 0 | soma % 11 == 1) {
            primDig = Integer.valueOf(0);
        } else {
            primDig = Integer.valueOf(11 - (soma % 11));
        }
        soma = 0;
        peso = 11;
        for (int i = 0; i < numDig.length(); i++) {
            soma += Integer.parseInt(numDig.substring(i, i + 1)) * peso--;
        }
        soma += primDig.intValue() * 2;
        if (soma % 11 == 0 | soma % 11 == 1) {
            segDig = Integer.valueOf(0);
        } else {
            segDig = Integer.valueOf(11 - (soma % 11));
        }
        return cpf.substring(9, 11).equals(primDig.toString() + segDig.toString());
    }

    public static boolean validaData(final String data) {
        final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        try {
            sdf.setLenient(false);
            sdf.parse(data);
            return true;
        } catch (final ParseException e) { /**/
            return false;
        }
    }
}

Espero ter ajudado.

Nivekzin

Muito Obrigado cara… era isso mesmo que eu estava precisando!!

pgioseffi

Agora funcionou certinho?

Nivekzin

Phillipe deu problema na hora de validar a data… está dizendo que a data ta errada sendo que eu pus 01/04/2011
tem que por sem as / ?

@EDIT:
err… esquece esse meu comentário… agora que notei que você pôs todos os fields com 1 variavel só!! eu troquei e rodo 100%!!

+1x MTO OBrigado

pgioseffi

Fechado então, se tá tudo certinho…

Qualquer coisa é só falar!

Criado 1 de abril de 2011
Ultima resposta 1 de abr. de 2011
Respostas 15
Participantes 2