Problema com botão da colculadora em java

11 respostas
L

alguem sabe como posso fazer para transformar meu textField em uma barra encima de minha calculadora???, naum ficar no espaço de um botão,
e se existir, há algum campo que seja apenas de saida de dados, tipo na calculadora a pessoa so pderia apertar os botoes para aparecer resultados ou numeros de uma operaçao, mais com o textFiel ele pode escrever qualquer coisa, tem como resolver isso tambem?

aqui esta ela:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class calculadora extends JFrame implements ActionListener{

		private JButton buttons[];
		private String names[]= {"7","8","9","/","4","5","6","*","1","2","3","-",".","0","=","+",};
		private Container container;
		private GridLayout grid1;
		private JTextField resultado;
		
		public calculadora(){
			super ("Calculadora em Java");
			
			grid1 = new GridLayout(4,4);
			
			container = getContentPane();
			container.setLayout(grid1);
			
			resultado = new JTextField("0");
			container.add(resultado);
			buttons = new JButton [names.length];
			
			for (int count = 0; count < names.length; count ++){
				buttons [count] = new JButton (names[count]);
				buttons [count].addActionListener(this);
				container.add(buttons[count]);
				
		setSize(300,300);
		setVisible(true);
			}		
		}
		
		
		
		
		public void actionPerformed(ActionEvent event){
				
		
		}
	public static void main (String args[]){
		
		calculadora application = new calculadora();
		
		application.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
		
	}
}

11 Respostas

D

bom…vc pode configurar a propriedade de edição do JTextField para false…

e quanto ao tamanho da jtextfield, depende do layout que vc está usando,
um gerenciador de layout interessante é o JForms…

[]'s

L

ai pessoal, acabei conseguindo de outra forma, maior, so que mais simples...

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class calculadora2 extends JFrame implements ActionListener{
	
	private GridBagLayout layout;
	private GridBagConstraints constraints;
	private Container container;
	
	public calculadora2(){
		
		super("Calculadora em java");
		
		container = getContentPane();
		layout = new GridBagLayout();
		container.setLayout(layout);
		
		constraints = new GridBagConstraints();
		
		JTextField textField = new JTextField("");
		
		String names[]= {"7","8","9","/","4","5","6","*","1","2","3","-",".","0","=","+","Limpar"};
		JButton buttons[] = new JButton [names.length];
		for (int count = 0; count < names.length; count ++){
		buttons [count] = new JButton (names[count]);
		buttons [count].addActionListener(this);}
		
		constraints.weightx = 1;
		constraints.weighty = 1;
		constraints.fill = GridBagConstraints.BOTH;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		addComponent(textField);
		
		constraints.gridwidth = 1;
		addComponent(buttons [0]);
		
		constraints.gridwidth = 2;
		addComponent(buttons [1]);
		
		constraints.gridwidth = GridBagConstraints.RELATIVE;
		addComponent(buttons [2]);
	
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		addComponent(buttons [3]);
	
		constraints.gridwidth = 1;
		addComponent(buttons [4]);
		
		constraints.gridwidth = 2;
		addComponent(buttons [5]);
		
		constraints.gridwidth = GridBagConstraints.RELATIVE;
		addComponent(buttons [6]);
	
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		addComponent(buttons [7]);
		
		constraints.gridwidth = 1;
		addComponent(buttons [8]);
		
		constraints.gridwidth = 2;
		addComponent(buttons [9]);
		
		constraints.gridwidth = GridBagConstraints.RELATIVE;
		addComponent(buttons [10]);
	
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		addComponent(buttons [11]);
		
		constraints.gridwidth = 1;
		addComponent(buttons [12]);
		
		constraints.gridwidth = 2;
		addComponent(buttons [13]);
		
		constraints.gridwidth = GridBagConstraints.RELATIVE;
		addComponent(buttons [14]);
	
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		addComponent(buttons [15]);
		
		constraints.weightx = 1;
		constraints.weighty = 1;
		constraints.fill = GridBagConstraints.BOTH;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		addComponent(buttons[16]);
		
		setSize (200,200);
	setVisible(true);
		
		
	}
		
		
	
	private void addComponent(Component component) {
		
	layout.setConstraints(component , constraints);
	container.add(component);
		
		
		
	
	}
		public void actionPerformed(ActionEvent event){
			
			
			
				
			}
			
		
		
		public static void main (String args[]){
			
			calculadora2 application = new calculadora2();
			
			application.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
			
		}
		
		
}

so que agora gostaria de ajuda para implementar o actionListener..., como faço para que quando o cara apertar o botão 7 aparece 7 no textField, etc.., e depois como faço para executar as operações ??????

F

Cara, estou tentando implementar o actionListener na sua calculadora, e para isso na hora do clique de um botão o texto que estiver no botão deve ser pego de alguma forma…

L

pois é, naum sei como fazer isso, ja faz horas que estou tentando, mais nada funciona…, acho que tem que fazer alguma coisa com o mouseClicked , mais naum sei usa-lo !!!

E
1) Retire a declaração do JTextField do construtor e coloque no corpo da classe, veja:
public class calculadora2 extends JFrame implements ActionListener {
    private GridBagLayout layout;
    private GridBagConstraints constraints;
    private Container container;
    private JTextField textField = new JTextField("");
...
2) Adicione o código abaixo no método actionPerformed():
public void actionPerformed(ActionEvent event) {

		if (((JButton) event.getSource()).getText().equals("0")) {
			textField.setText("0");
		} else if (((JButton) event.getSource()).getText().equals("1")) {
			textField.setText("1");
		} else if (((JButton) event.getSource()).getText().equals("2")) {
			textField.setText("2");
		} else if (((JButton) event.getSource()).getText().equals("3")) {
			textField.setText("3");
		} else if (((JButton) event.getSource()).getText().equals("4")) {
			textField.setText("4");
		} else if (((JButton) event.getSource()).getText().equals("5")) {
			textField.setText("5");
		} else if (((JButton) event.getSource()).getText().equals("6")) {
			textField.setText("6");
		} else if (((JButton) event.getSource()).getText().equals("7")) {
			textField.setText("7");
		} else if (((JButton) event.getSource()).getText().equals("8")) {
			textField.setText("8");
		} else if (((JButton) event.getSource()).getText().equals("9")) {
			textField.setText("9");
		}
	}
L

funcionou, porem, quando digito dois numeros, um sobrepoe o outro, tipo digito 1 depois 4 devez aparecer 14 fica so o quatro!

E
Tente assim:
public void actionPerformed(ActionEvent event) { 

      if (((JButton) event.getSource()).getText().equals("0")) { 
         textField.setText(textField.getText() + "0"); 
      } else if (((JButton) event.getSource()).getText().equals("1")) { 
         textField.setText(textField.getText() + "1"); 
      } else if (((JButton) event.getSource()).getText().equals("2")) { 
         textField.setText(textField.getText() + "2"); 
      } else if (((JButton) event.getSource()).getText().equals("3")) { 
         textField.setText(textField.getText() + "3"); 
      } else if (((JButton) event.getSource()).getText().equals("4")) { 
         textField.setText(textField.getText() + "4"); 
      } else if (((JButton) event.getSource()).getText().equals("5")) { 
         textField.setText(textField.getText() + "5"); 
      } else if (((JButton) event.getSource()).getText().equals("6")) { 
         textField.setText(textField.getText() + "6"); 
      } else if (((JButton) event.getSource()).getText().equals("7")) { 
         textField.setText(textField.getText() + "7"); 
      } else if (((JButton) event.getSource()).getText().equals("8")) { 
         textField.setText(textField.getText() + "8"); 
      } else if (((JButton) event.getSource()).getText().equals("9")) { 
         textField.setText(textField.getText() + "9"); 
      } 
   }
L

deu certo, agora estou tendando implementar as operações … veja como ficou meu codigo, e eu gostaria de saber se quando eu colocar o ponto ele vai interder que é um numero quebrado, decimal??? tipo 12.36 (doze ponto trinta e dois) ??? veja como esta meu codigo por enquanto !

if (((JButton) event.getSource()).getText().equals("0")) { textField.setText(textField.getText() + "0"); } else if (((JButton) event.getSource()).getText().equals("1")) { textField.setText(textField.getText() + "1"); } else if (((JButton) event.getSource()).getText().equals("2")) { textField.setText(textField.getText() + "2"); } else if (((JButton) event.getSource()).getText().equals("3")) { textField.setText(textField.getText() + "3"); } else if (((JButton) event.getSource()).getText().equals("4")) { textField.setText(textField.getText() + "4"); } else if (((JButton) event.getSource()).getText().equals("5")) { textField.setText(textField.getText() + "5"); } else if (((JButton) event.getSource()).getText().equals("6")) { textField.setText(textField.getText() + "6"); } else if (((JButton) event.getSource()).getText().equals("7")) { textField.setText(textField.getText() + "7"); } else if (((JButton) event.getSource()).getText().equals("8")) { textField.setText(textField.getText() + "8"); } else if (((JButton) event.getSource()).getText().equals("9")) { textField.setText(textField.getText() + "9"); } else if (((JButton) event.getSource()).getText().equals("Limpar")){ textField.setText(""); } else if (((JButton) event.getSource()).getText().equals(".")) { textField.setText(textField.getText() + "."); }

L

alguem tem alguma ideia de compo posso faze as operaçoes de minha calculadora, ja tentei de todo geito e naum consegui!!!

H

Cara, a melhor forma de fazer uma calculadora bonitinha e com código legível é usando uma máquina de estados. Você tem que saber se as teclas que o usuário está digitando são os operadores (+, -, *, /, …), se são os dígitos do 1º número, do 2º número, o que acontece se o usuário digitar um número, apertar + e depois =, se ele inserir um número, digitar *, - e =…

Faz uma diagrama cobrindo essas possibilidades para depois começar a codificar a lógica. Você já consegue pegar e reconhecer as teclas, agora só tem que interpretar os comandos do usuário. Faz uma reza pro São Google, que ele acha uns tutoriais para você entender de quê estou falando.

Até mais,

L

vcs saberiam me ajudar a implementar dessa forma?

...
    else if (((JButton) event.getSource()).getText().equals(".")) { 
		         textField.setText(textField.getText() + ".");
		      } else if (((JButton)event.getSource()).getText().equals("+")){
		         String valor1 = textField.getText();
		         textField.setText("");
		      } else if (((JButton)event.getSource()).getText().equals("-")){
		         String valor1 = textField.getText();
		         textField.setText("");
		      } else if (((JButton)event.getSource()).getText().equals("*")){
		         String valor1 = textField.getText();
		         textField.setText("");
		      } else if (((JButton)event.getSource()).getText().equals("/")){
		         String valor1 = textField.getText();
		        textField.setText("");
		      }  else if (((JButton)event.getSource()).getText().equals("=")){
		         
		      		switch(...)
		      		case ... (((JButton)event.getSource()).getText().equals("+")):
		      			faz soma
		      		case ... (((JButton)event.getSource()).getText().equals("-")):
		      			faz subtração
		      		case ... (((JButton)event.getSource()).getText().equals("*")):
		      			faz multiplicação
		      		case ... (((JButton)event.getSource()).getText().equals("/")):	
		      			faz divisão
		      }
		      
		}

assim, quando o cara digita um numero, este é salvo, e se apaga atela, depois ele digita outro numero, e aperta igual, ai verifica se foi uma adição , faz tal coisa, se foi subtração, faz outra, e assim por diante !

Criado 15 de fevereiro de 2005
Ultima resposta 17 de fev. de 2005
Respostas 11
Participantes 5