Programación de Windows y programación de interfaces
Importar Java. evento;
Importar Java. awt. evento. >
Importar javax.swing.jpanel;
Importar javax.swing.jtextfield;
/**
*Una calculadora similar a Windows. funciones e interfaz de la versión estándar de la calculadora que viene con el archivo adjunto. Sin embargo, aún no se admite la operación con teclado.
*/
La clase pública Calculator extiende JFrame para implementar ActionListener {
/* *Muestra los nombres de los botones en la calculadora*/
cadena final privada[] KEYS = { "7", "8", "9", "/", "sqrt", "4", "5", "6",
" * "," ", " 1 ", " 2 ", " 3 ", " 6- ", " 1/x ", " 0 ", " /-", ", " ", "=" };
/* *Mostrar el nombre de la tecla de función en la calculadora*/
private final String[]COMMAND = { " back space ", " ce ", " C " };
/* *Muestra el nombre de M en el lado izquierdo de la calculadora*/
Cadena final privada[] M = { " ", " MC ", " MR ", " MS ", " M " };
/* *Teclas en la calculadora*/
teclas JButton privadas[]= nuevo JButton[longitud de teclas];
/* *Botones para teclas de función en la calculadora*/
Comandos privados de JButton[]= nuevo JButton[longitud del comando];
/* *Botón M en la calculadora. lado izquierdo de la calculadora*/
JButton privado m[]= nuevo JButton[m ];
/* *Cuadro de texto del resultado del cálculo*/
//Indica si el usuario presionó el primer número de la expresión completa o el primer número después del operador
private. boolean firstDigit =. true
//Resultado intermedio del cálculo.
número de resultado doble privado = 0.0
//Operador para la operación actual
Operador de cadena privada = " = "
// ¿Es legal la operación?
operateValidFlag booleano privado = true;
/**
*Constructor
*/
Calculadora pública (){
super();
//Inicializar la calculadora
init();
//Configurar el cálculo El color de fondo del dispositivo.
This.setBackground(Color.Light_Gray);
This.setTitle("Calculator");
//Visualización de coordenadas en pantalla (500, 300 ) calculadora.
this.setLocation(500, 300);
//No modifiques el tamaño de la calculadora.
this . setresizable(false);
//Haga que los componentes en la calculadora tengan el tamaño apropiado.
este .pack();
}
/**
*Inicializa la calculadora
* //p>
Private void init() {
//El contenido del cuadro de texto está alineado a la derecha.
texto del resultado. alineación sehorizontal(JTextField.right);
//No se permite modificar el cuadro de texto del resultado.
texto del resultado. set editable(false);
//Establece el color de fondo del cuadro de texto en blanco.
resultText.setBackground(Color. White);
//Inicializa los botones de las teclas de la calculadora y coloca las teclas en la mesa de trabajo.
JPanel calckeysPanel = new JPanel();
// Diseño de cuadrícula, cuadrícula de 4 filas y 5 columnas, el intervalo horizontal es de 3 píxeles y el intervalo vertical es de 3 píxeles.
diseño calckeyspanel.set(new GridLayout(4, 5, 3, 3));
for(int I = 0; IltKEYS.lengthi) {
TECLAS[I]= nuevo JButton(TECLAS[I]);
calckeyspanel . add(teclas[I]);
Teclas[i]. set foreground(color . blue);
}
//Las teclas de operación están marcadas en rojo y otras teclas están marcadas en azul.
Botón [3]. establecer primer plano (color . rojo);
Botón [8]. establecer primer plano (color . rojo);
Clave[13]. establecer primer plano (color . rojo);
Clave[18]. establecer primer plano (color . rojo);
Clave[19]. set foreground(color . red);
//Inicializa las teclas de función, todas marcadas en rojo. Coloque las teclas de función en la mesa de trabajo.
Panel de comandos de JPanel = new JPanel();
//Adopta el diseño de cuadrícula, 1 fila y 3 columnas de cuadrícula, el intervalo horizontal entre cuadrículas es de 3 píxeles, el intervalo vertical es de 3 píxeles .
panel de comandos. establecer diseño(new GridLayout(1, 3, 3, 3));
for(int I = 0; i lt command. length; i) {
comandos[I]= nuevo JButton(COMANDO[I]);
panel de comandos . add(comandos[I]);
Comando[i]. set foreground(color . red);
}
//Inicializa la tecla M, márcala con rojo y coloca la tecla M en el tablero de dibujo.
JPanel calmsPanel = new JPanel();
//Utilice el administrador de diseño de cuadrícula para crear una cuadrícula con 5 filas y 1 columna. El espacio horizontal entre cuadrículas es de 3 píxeles y el espacio vertical es de 3 píxeles.
calmspanel.set diseño(new GridLayout(5, 1, 3, 3));
for(int I = 0; i ltm. length; i) {
M[I]= nuevo JButton(M[I]);
calmspanel.add(m[I]);
m[i]. set foreground(color . red);
}
//Hagamos el diseño general de la calculadora y coloquemos los calckeys y el bloc de dibujo de comandos en el medio de la calculadora.
//Coloca el cuadro de texto al norte de la calculadora y el tablero de dibujo de la calma al oeste de la calculadora.
//Cree un nuevo tablero de dibujo grande y coloque el tablero de dibujo de comandos y calckeys creado anteriormente en el tablero de dibujo.
JPanel panel 1 = new JPanel();
//La mesa de trabajo utiliza un 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.
panel 1. establecer diseño(new BorderLayout(3, 3));
panel1.add("Norte ", panel de comando); add("Center ", calckeysPanel);
//Crea una mesa de trabajo para colocar el cuadro de texto.
JPanel top = new JPanel();
top .set layout(new BorderLayout());
top.add("Centro", texto del resultado). );
//Diseño general
getContentPane(). setLayout(new BorderLayout(3, 5));
getContentPane(). add("norte",arriba);
getContentPane(). add("Centro", panel 1);
getContentPane(). add("西", calmsPanel);
//Agrega un detector de eventos para cada botón.
//Ambos usan el mismo detector de eventos, que es este objeto. La declaración de esta clase implementa ActionListener.
for(int I = 0; i ltKEYS.lengthi) {
Clave[i]. addActionListener(this);
}
for(int I = 0; i lt comando. longitud; i) {
comando[i]. addActionListener(this);
}
for(int I = 0; i ltm . length; i) {
m[i]. addActionListener(this);
}
}
/**
*Manejo de accidentes
*/
Acción de anulación pública realizada (evento de acción e){
//Obtener la etiqueta del origen del evento
string label = e. /p >
if(label .quals(COMMAND[0]){
//El usuario presionó la tecla "retroceso".
manejar el espacio hacia atrás();
p>} else if(label .quals(COMMAND[1])){
//El usuario presionó la tecla "CE"
texto del resultado. settext( " 0 ");
} else if(label .quals(COMMAND[2]){
//El usuario presionó la tecla "c".
handleC();
} else if ("0123456789.". indexOf(label)>= 0) {
//El usuario presionó la tecla numérica o el punto decimal key p>
handleNumber(label);
// handlezero(zero);
} De lo contrario {
//El usuario presionó el clave de operador.
handleOperator(label);
}
}
/**
*Handle. la tecla de retroceso evento presionado
*/
Private void handleBackspace() {
texto de cadena = texto de resultado();
int I = text . length();
If (i gt0) {
//Retroceso, elimina el último carácter del texto
text = text.substring(0, I-1);
if (text.length() == 0) {
//Si el texto no tiene contenido, inicializa el calculadora Varios valores.
resultado texto . settext(" 0 ");
primerDigit = true
operador = " =
} De lo contrario {
//Mostrar texto nuevo
resultText.setText(text);
}
}
}
/**
*Maneja el evento cuando se presiona la tecla numérica.
*
* @param key
*/
Número de identificador de vacío privado (clave de cadena){
if (firstDigit) {
//El primer número ingresado
texto del resultado . settext(key);
} else if ((key .equals(" ")) amp amp(resultText.getText().indexOf(" . ") lt0)) {
//Si se ingresa un punto decimal y no hay un punto decimal antes del punto decimal, el. El punto decimal se agregará después del cuadro de texto del resultado.
texto del resultado . settext(texto del resultado . gettext() ","
} else if(!key.equals(" . ")) {
//Si no se ingresa ningún punto decimal, agregue el número al cuadro de texto del resultado.
result text . settext(result text . gettext() key);
}
// Definitivamente no es el primer número ingresado en el futuro.
firstDigit = false
}
/**
*Maneja el evento cuando se presiona la tecla C.
*/
Manija de vacío privado C() {
//Inicializa varios valores de la calculadora.
texto del resultado . settext(" 0 ");
primerDigit = true
operador = " =
}
/**
* Maneja el evento cuando se presiona la tecla de operación.
*
* @param key
*/
Operador de identificador de vacío privado (clave de cadena){
if(operator .quals(“/”){
//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
operateValidFlag = false
ResultText.setText("El divisor no puede ser zero") ;
}else {
resultado num/= getNumberFromText();
}
} else if(operator . igual(" 1/x ")){
//Operación recíproca
if (resultNum == 0.0) {
//Operación ilegal
operateValidFlag = false
ResultText.setText("El cero no tiene recíproco");
} En caso contrario {
Número de resultados = 1 /Número de resultados;
}
} else if(operator .quals(" "){
//Operación de suma
resultado num = getNumberFromText() ;
} else if(operator .quals("-"){
//Operación de resta
resultado num-= getNumberFromText() ;
} else if(operator .quals(" * "){
//Operación de multiplicación
resultado num * = getNumberFromText();
} else if(operator . equals(" sqrt "){
//Operación de raíz cuadrada
resultado num = math . sqrt(resultado num);
} else if(operator . equals(" "){
//Operación porcentual, dividida por 100
Número de resultados = número de resultados/100; p>
} else if(operator .quals(" /-"){
//Operaciones con números positivos y negativos
resultado num = resultado num *(1);
} else if(operator .quals(" = "){
//Operación de asignación
resultado num = getNumberFromText();
}
if (operateValidFlag) {
//Operación de números de coma flotante de doble precisión
Long t 1
Double; T2;
t 1 =(largo)resultado num;
T2 = resultado num-t 1;
if (t2 == 0) { p>
texto del resultado . settext(cadena . valor de(t 1));
}
De lo contrario {
texto del resultado . settext(string . value of(resultNum));
}
}
//Operador equivalente al botón presionado por el usuario.
operador = clave
primerDigit = verdadero
operateValidFlag = verdadero
}
/** p>
*Obtener el número del cuadro de texto del resultado
*
* @return
*/
doble privado getNumberFromText (){
Resultado doble = 0;
Pruebe {
resultado = valor doble de (texto del resultado. gettext()). valor doble();
} catch(NumberFormatException e){
}
Devolver resultado;
}
Public static void main(String args[]) {
Calculadora calculadora1 = nueva calculadora();
calculadora 1. set visible(true);
calculadora 1. setdefaultcloseoperation(JFrame.EXIT_ON_CLOSE);
}
}