Programación Java...
importar java.awt.*;
importar java.lang.*
importar javax.swing.*; javax.swing.event.*;
importar java.awt.event.*;
importar java.text.DecimalFormat
la clase pública Caculator implementa ActionListener; { //Importar interfaz de escucha de acciones
//Unidades en el panel de diseño
Marco JFrame
JTextField textAnswer
Panel JPanel; , panel1, panel2, panel3;
JMenuBar mainMenu;
JTextField textMemory;
JLabel labelMemSpace; //labelMemSpace es simplemente para decoración y controla la forma del panel
p>JBotón botónBk, botónCe, botónC
JBotón botón[]
JBotón botónMC, botónMR, botónMS, botónMAd; p> JButton botonDot, botonAddAndSub, botonAdd, botonSub, botonMul,
botonDiv, botonMod
JButton botonSqrt, botonDao, botonEqual; helpMenu;
JMenuItem copyItem, pasteItem, tItem, sItem, numberGroup, topHelp, aboutCal
DecimalFormat df // Establece la precisión de salida de datos
booleano en el que se puede hacer clic; //Controlar la habilidad actual Sin clave
double Memoryd; //Usar números almacenados en la memoria
int Memoryi
double vard, respondido; para guardar datos dobles El valor intermedio (vard) y el resultado final (respuesta)
short key = -1, prekey = -1 // la clave se usa para guardar la operación actual y se usa la prekey; para guardar la operación anterior.
Copia de cadena; //Para copiar
Ayuda de JTextArea //Ayuda
JScrollPane scrollHelp; > //Función de construcción
public Caculator() {
clickable = true;
respondido = 0
frame = new JFrame; ("Calculadora ");
df = new DecimalFormat("0.##############"); //Establece la precisión de salida de datos (para valores dobles)
textAnswer = new JTextField(15);
textAnswer.setText("");
textAnswer.setEditable(false);
textAnswer.setBackground(nuevo color); (255, 255, 255));
panel = nuevo JPanel();
frame.getContentPane().add(panel)
panel1 = new JPanel();
panel2 = new JPanel();
panel.setLayout(new BorderLayout());
//Diseña todo el panel< / p>
mainMenu = nueva JMenuBar();
editMenu = nueva JMenu("Editar(E)");
viewMenu = nueva JMenu("Ver(V) " );
helpMenu = new JMenu("Ayuda(H)");
copyItem = new JMenuItem("Copiar(C) Ctrl+C");
copyItem.addActionListener(this);
pasteItem = new JMenuItem("Pegar(V) Ctrl+V");
pasteItem.addActionListener(this); >
editMenu.add(copyItem);
editMenu.add(pasteItem);
tItem = new JMenuItem("●Tipo estándar (T)"); >
tItem.addActionListener(this);
sItem = new JMenuItem(" Científico (S)");
sItem.addActionListener(this); p> numberGroup = new JMenuItem("Grupo de números (I)");
numberGroup.addActionListener(this);
viewMenu.add(tItem); > viewMenu.add(sItem);
viewMenu.add(numberGroup);
topHelp = new JMenuItem("Tema de ayuda(H)"); topHelp.addActionListener(this);
ayuda = new JTextArea(5, 20);
scrollHelp = new JScrollPane(ayuda
help.setEditable(); false);
help.append("Realizar un cálculo simple\n");
help.append("1. Escriba el primer número a calcular. \n");
help.append("2. Haga clic en "+" para realizar la suma, "-" para realizar la resta, "*" para realizar la multiplicación o "/" para realizar la división.
\n");
help.append("3. Escriba el siguiente número a calcular.\n");
help.append("4. Escriba todas las operaciones restantes caracteres y números. \n");
help.append("5. Haga clic en "=".
\n");
aboutCal = new JMenuItem(" Acerca de la Calculadora (A)");
aboutCal.addActionListener(this);
helpMenu. add (topHelp);
helpMenu.add(aboutCal);
mainMenu.add(editMenu);
mainMenu.add(viewMenu);
mainMenu.add(helpMenu);
panel.add(mainMenu, BorderLayout.NORTH);
panel.add(textAnswer, BorderLayout.CENTER);
panel.add(panel1, BorderLayout.SOUTH);
panel1.setLayout(new BorderLayout());
textMemory = nuevo JTextField(3);
textMemory.setEditable(false);
textMemory.setBackground(new Color(217, 217, 217));
labelMemSpace = new JLabel(" "); p>
botónBk = nuevo JButton("Retroceso");
botónBk.setForeground(nuevo Color(255, 0, 0));
botónCe = nuevo JButton( " CE");
botónCe.setForeground(nuevo Color(255, 0, 0));
botónC = nuevo JButton("C");
buttonC.setForeground(new Color(255, 0, 0));
buttonBk.addActionListener(this);
buttonCe.addActionListener(this); buttonC.addActionListener(this);
panel1.add(panel2, BorderLayout.NORTH);
panel2.setLayout(new FlowLayout(FlowLayout.RIGHT)); p> panel2.add(textMemory);
panel2.add(labelMemSpace);
panel2.add(buttonBk);
panel2.add(buttonCe ) ;
panel2.add(buttonC);
panel3 = nuevo JPanel();
panel1.add(panel3, BorderLayout.CENTER); >
p>
botón = nuevo JButton[10]
for (int i = 0; i < botón.longitud; i++) { <
/p>
botón[i] = new JButton(Integer.toString(i));
botón[i].setForeground(new Color(0, 0, 255)); >
}
botónMC = new JButton("MC");
botónMC.setForeground(nuevo Color(255, 0, 0)); > botónMR = nuevo JButton("MR");
botónMR.setForeground(nuevo Color(255, 0, 0));
botónMS = nuevo JButton("MS");
botónMS.setForeground(nuevo Color(255, 0, 0));
botónMAd = nuevo JButton("M+"); nuevo Color(255, 0, 0));
botónDot = nuevo JButton(".");
botónDot.setForeground(nuevo Color(0, 0, 255));
botónAddAndSub = new JButton("+/-");
botónAddAndSub.setForeground(nuevo Color(0, 0, 255));
botónAdd = nuevo JButton("+");
botónAdd.setForeground(nuevo Color(255, 0, 0));
botónSub = nuevo JButton("-"); >
botónSub.setForeground(nuevo Color(255, 0, 0));
botónMul = nuevo JButton("*");
botónMul.setForeground(nuevo Color( 255, 0, 0));
botónDiv = nuevo JButton("/");
botónDiv.setForeground(nuevo Color(255, 0, 0)); >
botónMod = nuevo JButton("%");
botónMod.setForeground(nuevo Color(0, 0, 255));
botónSqrt = nuevo JButton("sqrt) ");
buttonSqrt.setForeground(nuevo Color(0, 0, 255));
buttonDao = nuevo JButton("1/x");
buttonDao.setForeground(nuevo Color(0, 0, 255));
botónEqual = nuevo JButton("="
botónEqual.setForeground(nuevo Color(255, 0); , 0));
// Vincula todos los comportamientos a la escucha
panel3.setLayout(new GridLayout(4, 6));
panel3.add(buttonMC);
buttonMC.addActionListener(this); p>
p>
panel3.add(botón[7]);
botón[7].addActionListener(este
panel3.add(botón[); 8]);
botón[8].addActionListener(este);
panel3.add(botón[9]); addActionListener(este);
panel3.add(buttonDiv);
buttonDiv.addActionListener(este);
panel3.add(buttonSqrt); >
botónSqrt .addActionListener(este);
panel3.add(botónMR);
botónMR.addActionListener(este);
panel3.add( botón[4]) ;
botón[4].addActionListener(este);
panel3.add(botón[5]); ].addActionListener(este) );
panel3.add(botón[6]);
botón[6].addActionListener(este
panel3); .add(buttonMul);
buttonMul.addActionListener(this);
panel3.add(buttonMod);
buttonMod.addActionListener(this); p>
panel3 .add(botónMS);
botónMS.addActionListener(este);
panel3.add(botón[1]); botón[1].addActionListener (este);
panel3.add(botón[2]
botón[2].addActionListener(este); > panel3.add(botón [3]);
botón[3].addActionListener(este);
panel3.add(botónSub); .addActionListener(this);
panel3.add(buttonDao);
buttonDao.addActionListener(this);
panel3.add(buttonMAdd); p>
botónMAd .addActionListener(this);
panel3.add(botón[0]);
botón[0].addActionListener(this);
panel3.add(botónAddAndSub); addActionListener(this);
panel3.add(buttonDot);
buttonDot.addActionListener(this);
panel3.add(buttonAdd); >
buttonAdd.addActionListener(este);
panel3.add(buttonEqual);
buttonEqual.addActionListener(este);
frame.setDefaultCloseOperation( frame.EXIT_ON_CLOSE);
frame.pack();
frame.show();
}
//Establecer cada uno Comportamiento del botón
public void actionPerformed(ActionEvent event) {
boolean sign = false //Determina si hay un número doble involucrado en la operación, si es verdadero o no
p >Object temp = event.getSource();
try {
// Si se presiona el botón de datos, inserte los datos representados por el botón presionado en el actual cuadro de texto después de la cadena
for (int i = 0; i <= 9; i++)
if (temp == botón[i] && clickable == true)
textAnswer.setText(textAnswer.getText() + Integer.toString(i));
//Cuando se presiona el botón '.' ' .', si ya está incluido, no se permite insertar '.'
if (temp == buttonDot && clickable == true) {
boolean isDot = false ;
if (textAnswer.getText().length() == 0)
isDot = true
for (int i = 0; i <; textAnswer.getText( ).length(); i++)
if ('.' == textAnswer.getText().charAt(i)) {
isDot = true; /p>
break;
}
if (isDot == false)
textAnswer.setText(textAnswer.getText() + "."
p>}
if ((temp == botónAgregar || temp == botones);
ub || temp == botónMul || temp == botónDiv) && clicable == verdadero) {
//'+' operación
if (temp == botónAgregar) {
switch (prekey) {
caso 0:
respondido += Double.parseDouble(textAnswer.getText());
break ;
caso 1:
respondido -= Double.parseDouble(textAnswer.getText());
break
caso 2; :
respondido *= Double.parseDouble(textAnswer.getText());
break
caso 3:
if ( Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("El divisor no puede ser cero");
clickable = false
}
else
respondido /= Double.parseDouble(textAnswer.getText());
break
default; :
respondido = Double.parseDouble(textAnswer.getText();
}
textAnswer.setText(""); > prekey = clave = 0;
}
//'-' operación
if (temp == buttonSub) {
switch (prekey) {
caso 0:
respondido += Double.parseDouble(textAnswer.getText());
break; p > caso 1:
respondido -= Double.parseDouble(textAnswer.getText());
break
caso 2:
respondido *= Double.parseDouble(textAnswer.getText());
break;
caso 3:
if (Double.parseDouble(textAnswer. getText ()) == 0) {
textAnswer.setText("El divisor no puede ser cero");
> clicable = falso;
}
else
respondido /= Double.parseDouble(textAnswer.getText());
predeterminado:
respondido = Double.parseDouble(textAnswer.getText());
}
textAnswer.setText(" ");
prekey = clave = 1;
}
//'*' operación
if (temp == botónMul ) {
switch (prekey) {
caso 0:
respondido += Double.parseDouble(textAnswer.getText()); p> romper;
caso 1:
respondido -= Double.parseDouble(textAnswer.getText());
romper; > caso 2:
respondido *= Double.parseDouble(textAnswer.getText());
break;
caso 3:
> if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("El divisor no puede ser cero");
clickable = false; /p> p>
}
else
respondido /= Double.parseDouble(textAnswer.getText());
break; >
predeterminado:
respondido = Double.parseDouble(textAnswer.getText()
}
textAnswer.setText(""); /p>
prekey = clave = 2;
}
//'/' operación
if (temp == buttonDiv) { p>
switch (prekey) {
caso 0:
respondido += Double.parseDouble(textAnswer.getText());
break;
caso 1:
respondido -= Double.parseDouble(textAnswer.getText());
romper;
caso 2:
respondido *= Double.parseDouble(textAnswer.getText());
romper
caso; 3:
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("El divisor no puede ser cero");
clicable = false
}
else
respondido /= Double.parseDouble(textAnswer.getText()); > romper;
predeterminado:
respondido = Double.parseDouble(textAnswer.getText());
}
textAnswer.setText ( "");
prekey = clave = 3
}
}
//'='operación
if (temp == buttonEqual && clickable == true) {
//Si presionas '=" continuamente, realiza operaciones continuas
if (prekey == 5 ) {
if (key == 0) {
respondido += vard
textAnswer.setText(df.format(answerd)
p >}
if (clave == 1) {
respondido -= vard
textAnswer.setText(df.format(answerd) ) ;
}
if (clave == 2) {
respondido *= vard; formato (respuesta));
}
if (clave == 3) {
if (Double.parseDouble(textAnswer.getText()) == 0 ) {
textAnswer.setText("El divisor no puede ser cero");
clickable = false
}
else; {
respondido /= vard;
textAnswer.setText(df.format(answerd));
}
} p>
}
else {
vard = Doble.p
arseDouble(textAnswer.getText());
if (clave == 0) {
prekey = -1;
respondido += Double.parseDouble( textAnswer.getText());
textAnswer.setText(df.format(answerd));
}
if (clave == 1) {
prekey = -1;
respondido -= Double.parseDouble(textAnswer.getText());
textAnswer.setText(df.format(answerd)); ;
}
if (clave == 2) {
prekey = -1;
respondido *= Double.parseDouble( textAnswer.getText());
textAnswer.setText(df.format(answerd));
}
if (clave == 3) {
prekey = -1;
if (Double.parseDouble(textAnswer.getText()) == 0) {
textAnswer.setText("El divisor no puede ser cero");
clicable = false;
}
else {
respondido /= Double.parseDouble(textAnswer.getText ( ));
textAnswer.setText(df.format(respuesta));
}
}
}
prekey = 5;
}
//'%' operación, divide el segundo operando por 100
if (temp == buttonMod && se puede hacer clic == verdadero) {
if (respuesta == 0) {
String s = textAnswer.getText()
textAnswer.setText( s) ;
}
else {
booleano isDot = false
for (int i = 0; i < textAnswer. getText( ).length(); i++)
if ('.' == textAnswer.getText().charAt(i)) {
isDot = true; p> romper;
}
//
Si es un número doble, divida por 100
if (isDot == true) {
double dtemp = Double.parseDouble(textAnswer.getText()
);dtemp = dtemp / 100.0;
textAnswer.setText(Double.toString(dtemp));
}
else {
//Si es un número int pero es divisible por 100, elimina los dos últimos ceros
if (Integer.parseInt(textAnswer.getText()) % 100 == 0) {
int itemp = Integer.parseInt(textAnswer.getText());
itemp /= 100
textAnswer.setText(Integer.toString(itemp)); /p>
}
//Si es un número int, pero no es divisible por 100, será tratado como un número doble
else { p>
doble dtemp = Double.parseDouble (textAnswer.getText());
dtemp = dtemp / 100.0
textAnswer.setText(Double.toString(dtemp))
}
p>
}
}
}
// Operación raíz
if (temp == buttonSqrt && clickable == true) {
String s = textAnswer.getText()
if (s.charAt(0); ) == '-') {
textAnswer.setText("Los números negativos no pueden abrir el signo raíz");
clickable = false
}
else
textAnswer.setText (Double.toString(java.lang.Math.sqrt(Double.parseDouble(textAnswer.getText()))))
> }
//Operación recíproca
if (temp == buttonDao && clickable == true) {
if (textAnswer.getText().charAt( 0) == '0' && textAnswer.getText().length() == 1) {
textAnswer.setText("El cero no puede ser correspondido"); falso;
}
más {
bo
olean isDec = true;
int i, j, k;
String s = Double.toString(1 / Double.parseDouble(textAnswer.getText())); >
for (i = 0; i < s.length(); i++)
if (s.charAt(i) == '.')
break;
for (j = i + 1; j < s.length(); j++)
if (s.charAt(j) != '0') {
isDec = false;
romper
}
if (isDec == verdadero) {
String stemp = "";
for (k = 0; k < i; k++)
stemp += s.charAt(k);
textAnswer.setText( stemp);
}
else
textAnswer.setText(s); /p>
//Procesado cuando se presiona el botón '+/-'
if (temp == buttonAddAndSub && clickable == true) {
boolean isNumber = true
Cadena s = textAnswer.getText();
for (int i = 0; i < s.length(); i++)
if ( ! (s.charAt(i) >= '0' && s.charAt(i) <= '9' || s.charAt(i) == '.' || s.charAt(i) == '- ' )) {
isNumber = false
break
}
if (isNumber == true) {
//Si la primera letra de la cadena actual tiene un símbolo '-', significa que es un número negativo. Cuando se presiona nuevamente, el primer símbolo se eliminará
si (s). .charAt(0) == ' -') {
textAnswer.setText(""
for (int i = 1; i < s.length(); i++); ) {
char a = s.charAt(i);
textAnswer.setText(textAnswer.getText() + a
}
}
//Si el primer carácter de la cadena actual no es un símbolo, agregue un símbolo en la primera letra
else
textAnswer .setTex
t('-' + s);
}
}
//Operaciones de memoria relacionadas con la calculadora
//'MC ' operación, borre la memoria a 0
if (temp == buttonMC && clickable == true) {
Memoryd = Memoryi =
textMemory. ("");
}
// operación 'MS', guarda el contenido del cuadro de texto actual en la memoria y muestra 'M'
if (temp). == botónMS && en el que se puede hacer clic == verdadero) {
booleano isDot = false
textMemory.setText(" M"); 0; i < textAnswer.getText().length(); i++)
if ('.' == textAnswer.getText().charAt(i)) {
isDot = true;
break;
}
//Si es un doble, guárdalo en memoriad (memoria doble)
if (isDot == true) {
memoriad = Double.parseDouble(textAnswer.getText());
memoriai = 0; // Asegúrese de que el último valor esté almacenado en el; memoria p>
}
// Si es int, guárdalo en memoriai (memoria int)
else {
memoriai = Entero .parseInt(textAnswer .getText());
Memoryd = 0; //Asegúrese de que el último valor esté almacenado en la memoria
}
} p>
/ /Operación 'MR', genera la información en la memoria
if (temp == buttonMR && clickable == true) {
if (memoryd!= 0)
textAnswer.setText(Double.toString(memoryd));
if (memoryi != 0)
textAnswer.setText(Integer.toString( memoriai));
}
// La función 'M+' agrega los datos del cuadro de texto actual a los datos en la memoria y luego los almacena en la memoria
if ( temp == buttonMAd && clickable == true) {
boolean isDot = false
for (int i = 0; i < textAnswer.getText(); .length(); i++ )
if ('.' == textAnswer.getT
text().charAt(i)) {
isDot = true;
break
}
if (memoryi != 0) { //El almacenamiento es un número de tipo int
if (isDot == false) //El resumen es un número de tipo int
memoriai += Integer.parseInt( textAnswer .getText());
else { //El sumando es un número doble, luego el número en la memoria int se transfiere a la memoria doble y se suma al número actual, y la memoria int se borra.
memoriad = memoriai + Double.parseDouble(textAnswer.getText());
memoriai = 0
}
} <; /p>
else
memoriad += Double.parseDouble(textAnswer.getText());
}
//Presiona 'Retroceso' tecla para usar Loop para eliminar la última letra de la cadena actual
if (temp == buttonBk && clickable == true) {
String s = textAnswer.getText(); /p >
textAnswer.setText("");
for (int i = 0; i < s.length() - 1; i++) {
char a = s .charAt(i);
textAnswer.setText(textAnswer.getText() + a
}
}
/ /Presione el botón 'CE' para borrar los datos en el cuadro de texto actual
if (temp == buttonCe) {
textAnswer.setText(""); p>
clickable = true;
}
//Presione el botón 'C', los datos en el cuadro de texto se borran y var, la respuesta se borra a 0.
if (temp == botónC) {
vard = respondido = 0
textAnswer.setText(""); clickable = true;
}
//Presione la barra de menú 'Copiar'
if (temp == copyItem) {
copiar = textAnswer.getText();
}
//Presiona la barra de menú 'Pegar'
if (temp == pasteItem) {
textAnswer.setText( copiar);
}
if (temp == sItem) {
JOptionPane.showMessageDialo
g(panel, "Actualmente es una calculadora estándar,\nLa calculadora científica debe actualizarse."
}
//Haga clic en la barra de menú 'Tema de ayuda'<); /p>
if (temp == topHelp) {
JOptionPane.showMessageDialog(panel, scrollHelp);
}
//Presione el número; barra de menú del grupo
if (temp == numberGroup) {
if (numberGroup.getText().compareTo("Number Group (I)") == 0) < / p>
numberGroup.setText("√Número Grupo(I)");
else
numberGroup.setText("Número Grupo(I)"); >
else
numberGroup.setText("Grupo de números(I)");
p>
}
//Presione ' Barra de menú Acerca de
if (temp == aboutCal) {
JOptionPane.showMessageDialog(panel, "Calculadora versión 1.00\nDesarrollador: Lou Jing"
}
} catch (Exception e) { //Si hay una operación ilegal en la entrada, como presionar dos veces '+', captura la excepción
textAnswer.setText( "Operación ilegal");
clickable = false
}
}
//Función principal
public static void main(String args[]) {
new Caculator()
}
}