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.