Valor do Button em um JTextField

3 respostas
Katsutoshi
Boa noite! Eu sou iniciante em Java e recentemente venho querendo entrar em contato com o JFrame. Até ai tudo bem. O problema é o seguinte: Eu estou tentando fazer uma calculadora, parecida com as padrões que vem no Linux,Windows e etc, só que ao colocar o valor do botão e ao clicar várias vezes, o valor não é adicionado no TextField e sim substituido. O Código é esse:
import javax.swing.JOptionPane;

public class calc extends javax.swing.JFrame {

    public calc() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jFrame1 = new javax.swing.JFrame();
        jFrame2 = new javax.swing.JFrame();
        jInternalFrame1 = new javax.swing.JInternalFrame();
        jSeparator1 = new javax.swing.JSeparator();
        BotaoNumero1 = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenuItem2 = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jScrollPane1 = new javax.swing.JScrollPane();
        CampoNumero = new javax.swing.JTextPane();

        javax.swing.GroupLayout jFrame1Layout = new javax.swing.GroupLayout(jFrame1.getContentPane());
        jFrame1.getContentPane().setLayout(jFrame1Layout);
        jFrame1Layout.setHorizontalGroup(
            jFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        jFrame1Layout.setVerticalGroup(
            jFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout jFrame2Layout = new javax.swing.GroupLayout(jFrame2.getContentPane());
        jFrame2.getContentPane().setLayout(jFrame2Layout);
        jFrame2Layout.setHorizontalGroup(
            jFrame2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        jFrame2Layout.setVerticalGroup(
            jFrame2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jInternalFrame1.setVisible(true);

        BotaoNumero1.setText("1");
        BotaoNumero1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                BotaoNumero1ActionPerformed(evt);
            }
        });

        jMenu1.setText("Arquivo");

        jMenuItem2.setText("Item");
        jMenu1.add(jMenuItem2);

        jMenuBar1.add(jMenu1);

        jMenu2.setText("Sobre");

        jMenuItem1.setText("Item");
        jMenu2.add(jMenuItem1);

        jMenuBar1.add(jMenu2);

        jScrollPane1.setViewportView(CampoNumero);

        javax.swing.GroupLayout jInternalFrame1Layout = new javax.swing.GroupLayout(jInternalFrame1.getContentPane());
        jInternalFrame1.getContentPane().setLayout(jInternalFrame1Layout);
        jInternalFrame1Layout.setHorizontalGroup(
            jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jInternalFrame1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 364, Short.MAX_VALUE)
                    .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 364, Short.MAX_VALUE)
                    .addComponent(BotaoNumero1))
                .addContainerGap())
        );
        jInternalFrame1Layout.setVerticalGroup(
            jInternalFrame1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jInternalFrame1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(BotaoNumero1)
                .addContainerGap(183, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jInternalFrame1)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jInternalFrame1)
        );

        pack();
    }// </editor-fold>

private void BotaoNumero1ActionPerformed(java.awt.event.ActionEvent evt) {                                             
// TODO add your handling code here:
    BotaoNumero1.setText("1");
    CampoNumero.setText(BotaoNumero1.getText());
    System.out.print(CampoNumero.getText());

}                                            

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new calc().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton BotaoNumero1;
    private javax.swing.JTextPane CampoNumero;
    private javax.swing.JFrame jFrame1;
    private javax.swing.JFrame jFrame2;
    private javax.swing.JInternalFrame jInternalFrame1;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JSeparator jSeparator1;
    // End of variables declaration

}

Está meio desorganizado, me desculpem. Mas por favor, como eu resolveria este problema?
Agradeço desde já. Abraços.

3 Respostas

Zeed01

Boa madrugada Colegas !

Você realmente esta pedindo para a cada clique o valor de CampoNumero seja setado para “1”… veja:

private void BotaoNumero1ActionPerformed(java.awt.event.ActionEvent evt) {                                               
// TODO add your handling code here:   
    BotaoNumero1.setText("1");   
    CampoNumero.setText(BotaoNumero1.getText());   
    System.out.print(CampoNumero.getText());   
  
}

O setText do código faz exatamente isso.

Talvez trocando por:

private void BotaoNumero1ActionPerformed(java.awt.event.ActionEvent evt) {                                               
// TODO add your handling code here:   
    BotaoNumero1.setText("1");   
    CampoNumero.setText(CampoNumero.getText() + BotaoNumero1.getText());   
    System.out.print(CampoNumero.getText());   
}

Não olhei todo o código… mas acho que você pode começar por aí.
Só uma dica… se você é iniciante em Swing, sugiro que faça algumas coisas na mão, para aprender os conceitos, antes de utilizar as facilidades do NB.

Um abraço.

Katsutoshi

Muito Obrigado Zeed01.
Funcionou perfeitamente.

É, algumas pessoas já me falaram que eu deveria fazer algumas coisas na mão pra entender como tudo funciona, eu vo tentar fazer isso.

Katsutoshi

Revivendo o tópico pra que não postar outro por uma dúvida pequena.
A dúvida é:
Eu ainda estou desenvolvendo essa calculadora e a minha dúvida é de como eu faria para que não seja possível colocar mais de um Ponto nos números, no inicio é fácil, minha dúvida é quando a pessoa coloca um numero e coloca vários pontos depois desse valor numérico.

Agradeço desde já.
Abraços.

Criado 3 de outubro de 2008
Ultima resposta 18 de out. de 2008
Respostas 3
Participantes 2