Cómo escribir una ventana de calculadora de números enteros en Java e implementar sus funciones
Le doy uno listo para usar, compílelo y ejecútelo directamente, aprovéchelo
import?java.awt.BorderLayout;
import?java .awt.Color;
importar?java.awt.GridLayout;
importar?java.awt.event.ActionEvent;
importar?java.awt. event.ActionListener;
importar?java.awt.event.ActionEvent;
p>
importar?javax.swing.JButton;
¿importar? javax.swing.JFrame;
import?javax.swing.JPanel;
import?javax.swing.JTextField;
/** *?Una calculadora con funciones e interfaz similares a la versión estándar de la calculadora que viene con los accesorios de Windows. ?Pero la operación del teclado aún no es compatible. */
public?class?JCalculator?extends?JFrame?implements?ActionListener?{
/**?¿El nombre para mostrar de la clave en la calculadora?*/
privado?final?Cadena[]?KEYS?=?{?"7",?"8",?"9",?"/",?"sqrt",?"4",?"5 " ,?"6",
"*",?"%",?"1",?"2",?"3",?"-",?"1/x", ? "0",?"+/-",?".",?"+",?"="?};
/**?El nombre para mostrar de la tecla de función en la calculadora. ?* /
privado?final?String[]?COMMAND?=?{?"Retroceso",?"CE",?"C"?};
/** ?Cálculo ¿El nombre para mostrar de la M en el lado izquierdo del dispositivo?*/
private?final?String[]?M?=?{?"?",?"MC",?" MR",?"MS", ?"M+"?};
/**?¿Botones clave de la calculadora?*/
private?JButton?keys[]?= ?new?JButton[KEYS. length];
/**?¿El botón de la tecla de función en la calculadora?*/
privado?JButton?commands[]?=? new?JButton[COMMAND.length] ;
/**?¿El botón M en el lado izquierdo de la calculadora?*/
private?JButton?m[]?=? new?JButton[M.length];
p>
/**?Cuadro de texto del resultado del cálculo?*/
private?JTextField?resultText?=?new?JTextField ("0");
///? Indica si el usuario presiona el primer número de la expresión completa o el primer número después del operador
private?boolean?firstDigit?=? true;
/ /?El resultado intermedio del cálculo.
private?double?resultNum?=?0.0;
//El operador de la operación actual
private?String?operator?=?"= " ;
//¿La operación es legal?
private?boolean?operateValidFlag?=?true;
/**
?* ?Constructor
?*/
public?JCalculator()?{
super();
///? Inicializar calculadora de cálculo
init();
//Establecer el color de fondo de la calculadora
this.setBackground(Color.LIGHT_GRAY);
this.setTitle("Calculator");
//Muestra la calculadora en las coordenadas de pantalla (500,?300)
this.setLocation(500,? 300) ;
//No modificar el tamaño de la calculadora
this.setResizable(false);
//Realizar los componentes en el calculadora del tamaño apropiado
this.pack();
}
/**
?*?Inicializar la calculadora p>
?*/
private?void?init()?{
///?El contenido del cuadro de texto está alineado a la derecha
resultText.setHorizontalAlignment(JTextField .RIGHT);
/// No se permite la modificación del cuadro de texto del resultado
resultText.setEditable(false);
//Establece el color de fondo del cuadro de texto en Blanco
resultText.setBackground(Color.white);
//Inicializa los botones de la calculadora y coloca las teclas en un tablero de dibujo
JPanel ?calckeysPanel?=?new?JPanel();
//Utilice el diseño de cuadrícula, una cuadrícula de 4 filas y 5 columnas, y el intervalo horizontal entre cuadrículas es de 3 píxeles el intervalo vertical es de 3 píxeles
calckeysPanel.setLayout(new?GridLayout(4,?5,?3,?3));
for?( int?i? =?0;?i?
teclas[i]?=?new?JButton(KEYS[i]);
calckeysPanel .add(keys[i]);
keys[i].setForeground(Color.blue);
}
///? Se utilizan teclas de operador marcadas en rojo, otras teclas se representan en azul
keys[3].setForeground(Color.red);
keys[8].setForeground(Color.red) );
teclas[13].setForeground(Color.red);
teclas[18].setForeground(Color.red);
teclas[19 ].setForeground(Color .red);
//Las teclas de función de inicialización están marcadas en rojo.
Colocar teclas de función en una mesa de trabajo
JPanel?commandsPanel?=?new?JPanel();
//Usar diseño de cuadrícula, cuadrícula de 1 fila y 3 columnas Cuadrícula, el intervalo horizontal entre cuadrículas es de 3 píxeles y el intervalo vertical es de 3 píxeles
commandsPanel.setLayout(new?GridLayout(1,?3,?3,?3) );
for? (int?i?=?0;?i?
comandos[i]?=?JButton(COMMAND[i]);
commandsPanel.add(commands[i]);
commands[i].setForeground(Color.red);
}
// ?Inicialice la tecla M, márquela en rojo y coloque la tecla M en un tablero de dibujo
JPanel?calmsPanel?=?new?JPanel();
// Usar el administrador de diseño de cuadrícula, una cuadrícula de 5 filas y 1 columna, el intervalo horizontal entre cuadrículas es de 3 píxeles y el intervalo vertical es de 3 píxeles
calmsPanel.setLayout(new?GridLayout(5,?1, ?3,?3));
for?(int?i?=?0;?i?
m[i ]?=?new?JButton(M[i]);
calmsPanel.add(m[i]);
m[i].setForeground(Color.red);
}
///? Realicemos el diseño general de la calculadora y coloquemos los calckeys y los tableros de dibujo de comandos en la calculadora en el medio,
/ /? Coloque el cuadro de texto en el norte y la mesa de trabajo tranquila en el oeste de la calculadora.
//Cree una nueva mesa de trabajo grande y coloque las mesas de trabajo de comandos y calckeys creadas anteriormente en la mesa de trabajo
JPanel?panel1?=?new?JPanel();
p>
//La mesa de trabajo utiliza el administrador de diseño de bordes y los intervalos horizontales y verticales entre los componentes de la mesa de trabajo son de 3 píxeles
panel1.setLayout(new?BorderLayout(3, ? 3));
panel1.add("Norte",?commandsPanel);
panel1.add("Oeste",?calckeysPanel);
/ /?Crea un tablero de dibujo para colocar el cuadro de texto
JPanel?top?=?new?JPanel();
top.setLayout(new?BorderLayout());
top.add("Centro",?resultText);
//?Diseño general
getContentPane().setLayout(new?BorderLayout(3,? 5));
getContentPane().add("Norte",?top);
getContentPane().add("Centro",?panel1);
getContentPane ().add("West",?calmsPanel);
//Agregar detectores de eventos para cada botón
//Utilizar el mismo detector de eventos. es este objeto.
La declaración de esta clase incluye implements?ActionListener
for?(int?i?=?0;?i?
claves[ i].addActionListener(this);
}
for?(int?i?=?0;?i?
comandos[i].addActionListener(this);
}
for?(int?i?=?0;?i?
m[i].addActionListener(this);
}
}
/** p>
?*?Manejar eventos
?*/
public?void?actionPerformed(ActionEvent?e)?{
//Get Etiqueta del origen del evento
String?label?=?e.getActionCommand();
if?(label.equals(COMMAND[0]))?{
///?El usuario presionó la tecla "Retroceso"
handleBackspace();
}?else?if?(label.equals(COMMAND[1]))? {
//El usuario presionó la tecla "CE"
resultText.setText("0");
}?else?if?(label .equals( COMMAND[2]))?{
///?El usuario presionó la tecla "C"
handleC();
}?else ?if?( "0123456789.".indexOf(label)?>=?0)?{
///?El usuario presionó la tecla numérica o la tecla del punto decimal
handleNumber (etiqueta);
//?handlezero(zero);
}?else?{
///?El usuario presionó la tecla del operador
handleOperator(label );
}
}
/**
?*?Maneja el evento cuando el Se presiona la tecla de retroceso
?*/
private?void?handleBackspace()?{
String?text?=?resultText.getText();
int? i?=?text.length();
if?(i?>?0)?{
//Retroceso, elimine el último carácter del texto
text?=?text.substring(0,?i?-?1);
if?(text.length()?==?0 )?{
//Si el texto no tiene contenido, inicializa los distintos valores de la calculadora
resultText.setText("0");
primerDigit?=?true;
p>
operador?=?"=";
}?else?{
/ /?Mostrar texto nuevo
resultado
tText.setText(texto);
}
}
}
/**
?* ?Manejar el evento cuando se presiona la tecla numérica
?*?
?*?@param?key
?*/
private?void?handleNumber(String?key)?{
if?(firstDigit)?{
///?El primer número ingresado
resultText . setText(clave);
}?else?if?((key.equals("."))?&&?(resultText.getText().indexOf(".")?0 ) )?{
//Si la entrada es un punto decimal y no hay ningún punto decimal antes, el punto decimal se agregará al final del cuadro de texto del resultado
resultText.setText(resultText.getText() ?+?".");
}?else?if?(!key.equals("."))?{
///?Si la entrada no es un punto decimal, agregue el número al final del cuadro de texto del resultado
resultText.setText(resultText.getText()?+?key);
}
///? El siguiente número ingresado definitivamente no será el primer número
firstDigit?=?false;
}
/**
?* ?Manejar el evento cuando se presiona la tecla C
?*/
private?void?handleC() ?{
//Inicializar cada función del valor de la calculadora
resultText.setText("0");
firstDigit?=?true; p>
operador?=?"=";
}
/**
?*?Manejar el evento cuando se presiona la tecla del operador
?*?
?*?@param?key
?*/
private?void?handleOperator(String?key )?{
if?(operator.equals( "/"))?{
///?Operación de división
///?Si el valor en el cuadro de texto del resultado actual es igual a 0
if?(getNumberFromText ()?==?0.0)?{
//La operación es ilegal
operatorValidFlag?=?false;
resultText.setText("El divisor no puede ser cero");
}?else?{
resultNum?/ =?getNumberFromText();
}
}? else?if?(operator.equals("1/x"))?{
// ?Operación recíproca
if?(resultNum?==?0.0)?{
//La operación es ilegal
operaperValidFlag?=?false;
resultText.setText("Cero no tiene recíproco");
}?else?{
resultNum?=?1?/
?resultNum;
}
}?else?if?(operator.equals("+"))?{
///?Operación de adición p>
resultNum?+=?getNumberFromText();
}?else?if?(operator.equals("-"))?{
//Resta Operación
resultNum?-=?getNumberFromText();
}?else?if?(operator.equals("*"))?{
/ /?Operación de multiplicación
resultNum?*=?getNumberFromText();
}?else?if?(operator.equals("sqrt"))?{
///? Operación de raíz cuadrada
resultNum?=?Math.sqrt(resultNum);
}?else?if?(operator.equals("%"))? {
///?Operación de signo de porcentaje, dividida por 100
resultNum?=?resultNum?/?100;
}?else?if?(operador .equals("+/-"))?{
///? Operaciones con números positivos y negativos
resultNum?=?resultNum?*?(-1);
}?else?if?(operator.equals("="))?{
///?Operación de asignación
resultNum?=?getNumberFromText();< / p>
}
if?(operateValidFlag)?{
///?Operación de números de coma flotante de doble precisión
long?t1;
doble?t2;
t1?=?(long)?NumResultado;
t2?=?NumResultado?-?t1;
si ?(t2?==?0)?{
resultText.setText(String.valueOf(t1));
}?else?{
resultText .setText(String.valueOf(resultNum));
}
}
/// El operador es igual al botón presionado por el usuario
operador?=?clave;
primerDigit?=?true;
operarValidFlag?=?true;
}
/* *
?*?Obtener el número del cuadro de texto del resultado
?*?
?*?@return
?*/
privado?double?getNumberFromText()?{
double?result?=?0;
¿probar?{
resultado? =?Double.valueOf(resultText.getText()).doubleValue();
}?catch?(NumberFormatException?e)?{
}
regresar?resu
lt;
}
public?static?void?main(String?args[])?{
JCalculator?JCalculator1?=?new?JCalculator( );
JCalculator1.setVisible(true);
JCalculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
} p>