¿Programación de interfaz de calculadora Java para suma, resta, multiplicación y división?
Escribí esto antes cuando estaba estudiando. Escuché de gente en el trabajo que el marco JFrame básicamente no se usa en las empresas, así que no lo estudié en profundidad. Si lo deseas, puedo hacerlo. dártelo y mejorarlo. Es mejor hacerlo una vez. Si no se puede perfeccionar, podemos hablar de ello más adelante
prueba del paquete;
importar java.awt. .*;
importar java.awt.event.* ;
importar javax.swing.*;
la clase pública Z extiende JFrame implementa ActionListener, FocusListener {
cadena privada[] total = { "1", "2", "3", " ", "4", "5", "6", "-", "7", " 8", "9", "*", "0", "." , "=", "/" }; // Matriz total
cadena privada[] other = { "clear", "eliminar" }; // Otras matrices de funciones
private String[] símbolo = { " ", "-", "*", "/" } // matriz de símbolos
Cadena privada multinúmero = "0", operador1 = "", existe = "", operador2 = nulo, s = "";
// multinúmero (varios dígitos) operador1 (operador) existe (existe )
private double d1, d2 = 0;
private int Count = 0
JPanel jptotal = new JPanel(); p>
JTextField jtexternal = new JTextField("0"); // Cuadro de texto externo
JTextField jtinside = new JTextField() // Cuadro de texto interno
JPanel jptop1; = new JPanel(); // Panel superior 1
JPanel jptop2 = new JPanel(); // Panel superior 2
JPanel jpmiddle = new JPanel();
public Z() {
jptotal.setLayout(new BorderLayout());
// Usar el administrador de diseño de bordes
jptop1 .setLayout(nuevo GridLayout(2, 0));
jptop1.add(jtexternal);
jptop2.setLayout(nuevo GridLayout(0, 2));
for (int i = 0; i lt; other. length; i) {
JButton jbi = new JButton("" other[i]);
jbi. establecerTamaño(
100, 10);
jptop2.add(jbi);
jbi.addActionListener(this);
}
jpmiddle. setLayout(new GridLayout(4, 0));
for (int i = 0; i lt; total.length; i) {
JButton jbi = new JButton("" total[i]);
jpmiddle.add(jbi);
jbi.addActionListener(this);
}
jtexternal .addFocusListener(this);
jtexternal.add(jtinside);
jtinside.addFocusListener(this);
// La función de las tres líneas anteriores del código es Hacer que el cuadro de texto no sea seleccionable
jptop1.add(jptop2);
jptotal.add(jptop1, "North");
// Tomar jp1 como En su conjunto, deje que el contenido de jp1 se complete desde arriba
jptotal.add(jpmiddle);
add(jptotal);
setVisible (verdadero) ;
setSize(500, 500);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
// ctrl /: Comentario
public void actionPerformed(ActionEvent e) lanza ArithmeticException {
prueba {
String inputing = e.getActionCommand();
// Indica obtener el contenido de entrada actual
if (inputing.equals(".")) {
Contar ;
}
existe = jtexternal.getText();
if (operator2 != null) {
int k = 0;
for (int i = 0; i lt; símbolo.longitud; i ) {
if (operator2.equals(symbol[i])) {
k = k 1;
}
if (inputing.equals(symbol[i])) {
k = k 1; p>
}
if (k == 2) {
jtexternal.setText(e
xists.substring(0, existe.length() - 1) ingresando);
operador1 = ingresando
retorno
}
// Los cuatro operadores aritméticos no pueden existir al mismo tiempo y la nueva entrada reemplaza a la anterior
if (operator2.equals(symbol[i]) amp; amp; inputing.equals(" .")) {
return;
}
// Date cuenta de que los cuatro operadores aritméticos y el punto no pueden aparecer uno al lado del otro (los cuatro operadores aritméticos los operadores pueden aparecer detrás del punto, pero no antes del punto)
}
}
if (exists.equals("0")) { p>
if (inputing.equals(". ") || (inputing.equals(" ")) || (inputing.equals("-")) || (inputing.equals("*"))
|| (inputing.equals ("/"))) {
jtexternal.setText("0" ingresando);
} más { p>
jtexternal.setText(ingresando);
}
} else {
jtextternal.setText(existe ingresando
<); p> }// Implementación Si no hay ningún número distinto de cero antes de 0, no importa cuántas veces ingrese 0, solo se mostrará un 0. Si ingresa otros números, se mostrará 0. reemplazado
if ((d1 == 0.0 || d2 = = 0.0) amp;amp; inputing.equals("=") amp;amp; !exists.substring(0, 1).equals( "0")) {
return;
}
// Si hay números en el cuadro de texto, ingrese el signo igual y se imprimirá mismo
if (inputing.equals("clear")) {
multinumber = "0"
existe = ""; p> operador1 = "";
jtexternal.setText("0"
operador2 = nulo
d2 = 0; p> s = "";
Count = 0;
d1 = 0.0;
// Implementación, cuando se hace clic en borrar, el cuadro de texto será se borra a 0 y todos los datos se restaurarán al estado inicial
} else if (inputing.equals("delete")) {
if (exists.length() lt; = 1 || s.equals("=")) {
jtexternal.setText("0");
multinúmero = "0";
existe = "";
operador1 = "";
operador2 = nulo;
d2 = 0;
s = "";
Contar = 0; 0;
// Implementación, presione eliminar para eliminar el contenido que acaba de ingresar. Si se elimina el último número, el efecto es el mismo que presionar borrar
} else {
if (inputing.equals(" ") || inputing.equals("-") || inputing.equals("*") || inputing.equals("/")) {
Cuenta = 1;
}
jtexternal.setText(exists.substring(0, existe.length() - 1)); Almacenar operador2 Valor único
operador2 = existe.substring(exists.length() - 2, existe.length() - 1);
/*
* Implementación Si hay números después de los cuatro operadores aritméticos
* Entonces, si presiona la tecla Eliminar en este momento
* Si la nueva entrada después de la eliminación siguen siendo los cuatro operadores aritméticos operadores
* Entonces los cuatro operadores aritméticos originales serán reemplazados por los recién ingresados
*/
}
} else if (!inputing.equals(" ") amp; amp; !inputing.equals("-") amp;amp; !inputing.equals("*") amp;amp; !inputing.equals("/") p>
amp;amp; !inputing.equals("=")) {
// Determina si la entrada es un número
if (s.equals(" =")) {
if (exists.equals("El divisor no puede ser 0") || new Double(exists) == d1) {
if (inputing.equals (".")) {
jtexternal.setText("0" ingresando
} else {
jtextternal.setText(entrando); p>
}
}
s = "";
}
// Después de completar un cálculo, se se puede realizar una nueva operación
if (multinumber == null) { // Cálculo de varios dígitos
multinumbe
r = ingresando;
} else {
multinúmero = ingresando
}
d1 = nuevo Doble(multinúmero);
p> p>if (operator1.equals(" ")) { // Realiza cuatro operaciones aritméticas
if (d2 == 0) {
if (operator1. es igual(" *") || operador1.equals("/")) {
d2 = 1; p> // Implementación, cuando no hay ningún número después de los cuatro operadores aritméticos, el resultado después de ingresar el signo igual será el resultado antes del símbolo. Si solo hay un número antes del símbolo, entonces se imprimirá. p>
d1 = d1 d2;
p>} else if (operator1.equals("-")) {
d1 = d2 - d1;
} más si (operador1.equals("*")) {
d1 = d1 * d2;
} más si (operador1.equals("/")) {
d1 = d2 / d1;
}
//Utiliza la variable temporal f2 para implementar cuatro operaciones aritméticas
operador2 = entrada ;
} else if (!inputing.quals("=")) { // [Cuatro operadores aritméticos] Continuar el cálculo después de ingresar el signo igual
multinumber = "0";
operador1 = ingresando;
d2 = d1;
operador2 = ingresando
s = ""; p> Count = 0;
// Implementar operaciones decimales
} else { // Solo [=] para obtener el resultado final
jtexternal.setText( "" d1);
cuenta = 0
s = "=";
multinúmero = "0"; (operator2.equals("0") amp; amp; "/" .equals(operator1)) {
operator2 = null
d1 = 0; valores con valores correctos
throw new ArithmeticException( );//Especifica las condiciones para lanzar excepciones
//Los cálculos de asignaciones no arrojan excepciones aritméticas si así lo deseas. para lanzar, debe especificar las condiciones para volver a lanzar la excepción
} else {
operator1 = inputing
operator2 = null
d2 =
0;
} // Resultado del cálculo
if (inputing.equals("=") amp; amp; (d1 == 0.0 || d2 == 0.0)) {
return;
}
// Implementar entrada no repetible de signo igual
}
} catch ( ArithmeticException e1) {
jtexternal.setText("El divisor no puede ser 0");
// Especifica el contenido de la excepción lanzada
} p>
}
public static void main(String[] args) {
new Z();
}
public void focusGained (FocusEvent e) {
jtinside.requestFocus();
// Deja que el foco se centre en el cuadro de texto interno para realizar la función no enfocable del cuadro de texto externo
}
public void focusLost(FocusEvent e) {
}
}
/* p>
* Actualmente, la función de restaurar otros valores después de eliminar elimina el valor de entrada no se ha implementado. Por ejemplo, quiero calcular 1 1, pero al ingresar es igual. signo, quiero cambiarlo a otra cosa
* Por ejemplo, si quiero cambiarlo a 1-1, presiono eliminar para eliminar 1 y el signo más y lo reemplazo por 1-1, pero el resultado no es 0. O lo cambio a 11 1, pero el resultado no es 12
* O cuando ingresé 11, accidentalmente ingresé un número extra si realicé el cálculo nuevamente en este. vez, el resultado no sería el que quería...
*/