Friday, March 13, 2015

Começando: Calculadora com interface gráfica!

Esse blog é um diário para recordar meu aprendizado de java na matéria de CES-22 no Instituto Tecnológico de Aeronáutica. Fique à vontade para acompanhar meu progresso!

Nosso professor, Edgar Yano, deu algumas aulas sobre a linguagem Java e pediu, como primeiro projeto a implementação de uma calculadora com interface gráfica. Conversando com meus colegas, foi me passado um tutorial exatamente para o pedido e, felizmente, por ter um conhecimento básico/intermediário de C#, foi possível entendê-lo quase completamente sem maiores problemas.

Segue o link do tutorial:

http://www.dreamincode.net/forums/topic/321933-creating-a-calculator-using-jframe/

Depois de seguí-lo parcialmente, cheguei à uma casca de calculadora. Visor e botões em lugares adequados, porém nada é funcional. Segue o código, comentado:

1:  import java.awt.*;  
2:  //importando bibliotecas import javax.swing.*;  
3:  import java.awt.event.*;  
4:  public class Calculator extends JFrame implements ActionListener  
5:  {  
6:   //Declarando variáveis  
7:   JPanel[] row = new JPanel[5];  
8:   JButton[] button = new JButton[19];  
9:   String[] buttonString = {"7","8","9","+", //colocando todas as strings em um único vetor para poder usar  
10:    "4","5","6","-", //um loop no futuro e facilmente adicionar o texto aos botões  
11:    "1","2","3","*",  
12:    ".","/","C","sqrt",  
13:    "+/-","=","0"};  
14:   //Definindo tamanho do display e botões  
15:   Dimension displayDimension = new Dimension(300, 35);  
16:   Dimension regularDimension = new Dimension(45, 40);  
17:   Dimension rColumnDimension = new Dimension(60, 40);  
18:   Dimension zeroButtonDimension = new Dimension(90, 40);  
19:   boolean[] function = new boolean[4]; //vetor para armazenar a função pedida pelo usuário  
20:   double[] temporary = {0,0}; //variáveis auxiliares para calcular resultados  
21:   JTextArea display = new JTextArea(1,20);  
22:   public static void main(String[] args)  
23:   {  
24:   Calculator c = new Calculator();   
25:   }  
26:   Calculator()  
27:   {  
28:   //o tutorial não explica a necessidade dessa função super. No entanto, procurando na internet, parece que  
29:   //ela é responsável por invocar o construtor pai  
30:   //super("Calculator");  
31:   setDesign();  
32:   setSize(380,250);  
33:   setResizable(false); //se o windows não deixa ajustar o tamanho da calculadora, por que eu iria?  
34:   setDefaultCloseOperation(EXIT_ON_CLOSE);  
35:   //Como vou querer 5 linhas e 5 colunas  
36:   GridLayout grid = new GridLayout(5,5);  
37:   setLayout(grid);  
38:   //inicializando o vetor de funções  
39:   for(int i=0;i<4;i++)  
40:   function[i] = false;  
41:   FlowLayout f1 = new FlowLayout(FlowLayout.CENTER); //utilizamos a função FlowLayout para posicionar as colunas e linhas  
42:   FlowLayout f2 = new FlowLayout(FlowLayout.CENTER,1,1); //1,1 são os espaçamentos horizontais e verticais em relação a f1  
43:   for(int i=0; i<5; i++)  
44:   row[i] = new JPanel();  
45:   row[0].setLayout(f1);  
46:   for(int i = 1; i<5;i++)  
47:   row[i].setLayout(f2);  
48:   //agora as linhas e colunas já podem ser usadas!  
49:   for(int i = 0; i < 19; i++) //coloca as características dos botões  
50:   {  
51:     button[i] = new JButton();  
52:     button[i].setText(buttonString[i]);  
53:     button[i].addActionListener((ActionListener) this); //será usado para implementação do funcionamento do botão no futuro  
54:   }  
55:   display.setEditable(false); //não seria bom permitir o usuário editar o display  
56:   display.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); //Por alguma razão desconhecida por mim, calculadoras geralmente  
57:   //tem o display escrevendo da direita para a esquerda  
58:   //definindo tamanhos!  
59:   display.setPreferredSize(displayDimension);  
60:   for(int i = 0; i < 14; i++)  
61:     button[i].setPreferredSize(regularDimension);  
62:   for(int i = 14; i < 18; i++)  
63:     button[i].setPreferredSize(rColumnDimension);  
64:   button[18].setPreferredSize(zeroButtonDimension);  
65:   //colocando o display e os botões nas linhas e colunas  
66:   row[0].add(display);  
67:   add(row[0]);  
68:   for(int i = 0; i < 4; i++)  
69:     row[1].add(button[i]);  
70:   row[1].add(button[14]);  
71:   add(row[1]);  
72:   for(int i = 4; i < 8; i++)  
73:     row[2].add(button[i]);  
74:   row[2].add(button[15]);  
75:   add(row[2]);  
76:   for(int i = 8; i < 12; i++)  
77:     row[3].add(button[i]);  
78:   row[3].add(button[16]);  
79:   add(row[3]);  
80:   row[4].add(button[18]);  
81:   for(int i = 12; i < 14; i++)  
82:     row[4].add(button[i]);  
83:   row[4].add(button[17]);  
84:   add(row[4]);  
85:   setVisible(true);  
86:   }  
87:   //necessário para possibilitar a compilação  
88:   public final void setDesign() {  
89:     try {  
90:       UIManager.setLookAndFeel(  
91:           "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");  
92:     } catch(Exception e) {   
93:     }  
94:   }  
95:   public void actionPerformed(ActionEvent ae)  
96:   {  
97:   }  
98:  }  


O funcionamento de todos os botões será implementado ainda nesse fim de semana.

No comments:

Post a Comment