Cómo hacer curvas
Hay varias cuestiones clave que deben resolverse al escribir un subprograma Java para dibujar k-líneas, a saber: 1) el uso de subprocesos múltiples; administradores de diseño; 3) entrada de datos y aplicación del flujo de salida; 4) configuración y monitoreo de eventos de mouse y teclado.
Todo el proceso y método de programación se explicará detalladamente mediante un ejemplo.
Primero, utilice subprocesos múltiples
Un subprograma Java completo incluye Init(), Start(), Stop() y Destroy() (es decir, inicialización, inicio, parada y borrado). Cuatro métodos constituyen un ciclo de vida completo y su orden de ejecución también se ejecuta de arriba a abajo.
En el proceso de dibujar el gráfico de líneas K, además de dibujar la tabla y el rectángulo que representa el aumento y la caída de la acción, también debes monitorear los eventos del mouse y dibujar una "cruz" que se mueve libremente. cursor para ubicar y mostrar todas las búsquedas del valor del precio diario de la acción (como el precio de apertura y el precio de cierre, etc. en este momento, para evitar parpadeos y reducir el tiempo de espera para volver a calcular, además de volver a dibujar); el cursor "cruz" que se mueve con el mouse, el diseño de la página, la línea negativa Ni la línea Yang ni el rectángulo de la línea Yang se vuelven a dibujar, esto requiere la aplicación de múltiples hilos para completar esta tarea;
1. Algunos conceptos básicos sobre el subproceso múltiple:
El subproceso múltiple en realidad es iniciar otro proceso, ejecutándose independientemente del programa principal, cargado desde el método Start() del principal. programa, y se llama y ejecuta el método run(). Hay dos formas de implementar subprocesos múltiples: crear una subclase de la clase Thread (herencia de clase) e implementar la interfaz ejecutable.
Para facilitar su uso, Java encapsula todas las funciones relacionadas con subprocesos en una clase en la biblioteca de clases de Java: Java.lang.Thread. A través de esta clase, Java puede crear, controlar y finalizar subprocesos, y completarlos todos. Tareas relacionadas. Operaciones relacionadas con subprocesos múltiples.
En el lenguaje Java, las subclases sólo pueden heredar superclases (clases padre). Debido a que el subprograma de Java que queremos escribir se aplica a páginas web, primero debemos heredar la clase de navegador (java.applet). Entonces, en este ejemplo, implementamos subprocesos múltiples implementando la interfaz ejecutable. La declaración es la siguiente:
La clase pública StockApplet extiende java.applet.Applet para implementar Runnable
2. Aplicación multiproceso:
Primero, defina e inicialice el hilo que se creará (M_pointThread) en el método init():
Thread M _ pointThread = null
.Luego, agregue el siguiente código a los métodos Start() y Stop():
//Cuando se abre la página del navegador y el código del subprograma Java comienza a cargarse, el método start() se ejecuta.
Public void Start()
{
If (M_pointThread==null) //Si el hilo aún no se ha generado.
{
M _ pointThread = nuevo hilo (este); //Crea un nuevo hilo.
m _ point thread . start(); //Iniciar el hilo
}
}
//Cuando la página actual está cerrado o Cuando vaya a otras páginas web,
llame al método stop() para liberar recursos del sistema.
Sitio público vacío()
{
if (M_pointThread!=null)
//Si el hilo aún se está ejecutando
p>{
m _ point thread .
//Detener el hilo
M _ pointThread = null
//Libera los recursos ocupados por el hilo
}
}
3. Escribe el código para la ejecución del hilo:
Operación pública no válida ()
{
m _ gráficos = obtener gráficos();
m _ gráficos setxormode(color . blanco) ;
//Utiliza el método XOR para dibujar un cursor en forma de cruz.
while(true)
{
Prueba
{
If(MouseMove==true) / /Después de detectar el movimiento del mouse,
Ejecute el siguiente código
{//Cuando el mouse esté en la siguiente área (diseño del subprograma Java)
En tiempo interno , Realizar operaciones de dibujo lineal.
If (x0 & gt50 & amp& ampx0 & lt600){M_graphics.drawLine
(x0, 30, x0, 380);}
If (y0 & gt30 & amp&y0 & lt380){M_graphics.drawLine
(50, y0, 600, y0);}
if(X & gt;50 & amp& ampX & lt600) { M_graphics.drawLine
(X, 30, X, 380);}
Si (Y & gt30 & amp& ampY & lt380) {M_graphics.drawLine
(50, Y, 600, Y);}
MouseMove = fase
x0 = X; // Pasa los parámetros de coordenadas actuales
y0 = Y;
}
} catch(NullPointerException npe){ }
//Captura posibles excepciones.
}
Segundo, administrador de diseño
Cuando el subprograma de Java en este ejemplo se está ejecutando, debe dibujarse en el área de ejecución de Java. subprograma en la página "etiquetas" correspondientes para mostrar los diferentes valores y agregar un "cuadro de texto" para recibir el símbolo bursátil ingresado. Establecer la posición y el tamaño de estas "etiquetas" y "cuadros de texto" pertenece al ámbito de aplicación de la gestión de diseño.
Los tipos de administradores de diseño proporcionados por el lenguaje Java incluyen: diseño de borde, diseño de tarjeta, diseño de proceso y diseño de cuadrícula, cada uno con características diferentes y se puede seleccionar según las necesidades reales, pero el diseño es más gratuito. el espacio es " "Sin administrador de diseño", es decir, agregar componentes manualmente a la posición absoluta del diseño de página sin utilizar ningún formato de diseño. En este ejemplo, se utiliza "sin administrador de diseño".
Cuando se utiliza "sin administrador de diseño", lo primero que debe hacer es hacer una declaración, es decir:
set layout(null);
Luego; utilizar El método reshape() especifica la posición y el tamaño específicos del componente.
La oración básica es la siguiente:
Etiqueta Etiqueta 1 = nueva Etiqueta();
//Definir la etiqueta
this .add(label 1);
//Agregar la etiqueta al administrador de diseño
label 1. (10, 10, 30, 30);
//Dibuja una etiqueta en la posición especificada.
Para varias etiquetas y cuadros de texto, puedes agregarlos según este formato.
Tres.
Flujo de datos de entrada y salida
Cuando el subprograma de Java se ejecuta en el navegador del cliente, necesita leer datos relacionados con las acciones del servidor para crear gráficos, lo que implica la aplicación del flujo de datos de Java.
El paquete Java.io proporciona varias clases para intercambiar información con varios dispositivos de E/S. Las dos clases principales son la clase InputStream y la clase OutputStream.
Para facilitar la implementación, en este ejemplo, primero escribimos los campos relevantes en la base de datos de stock del lado del servidor (como show128.dbf) en un archivo de texto (el formato es: la primera línea es el nombre chino de la acción, cada línea posterior incluye: fecha de apertura, precio de apertura, precio más alto, precio más bajo, precio de cierre, volumen de negociación), con el código de la acción como nombre de archivo (por ejemplo, luego use un subprograma de Java para leer datos del archivo de texto en el lado del servidor. De esta manera, el acceso a la base de datos del lado del servidor se convierte en operaciones de E/S en el archivo. La declaración implementada es la siguiente:
URL urlc=new. URL( "pub\wwwroot\), abra el navegador, en la entrada de la columna de dirección. *;
La clase pública StockApplet extiende java.applet.Applet para implementar Runnable
{// La siguiente es la parte de declaración de la variable pública
int Move_Length =0, Move_Sum = 0;
Nombre del archivo de cadena, nombre de la cadena, fecha del contenido;
int SP[]= nuevo int[2000];
int KP[]= nuevo int[2000];
int JD[]= nuevo int[2000]; p>
int JG[]= nuevo int[2000];
int Mid _ Worth[]= nuevo int[2000];
String myDate[]=nueva cadena [2000];
Doble CJL[] =nuevo doble[2000];
doble MaxCJL, MidCJL
Etiqueta Etiqueta[]=nueva etiqueta[10] ;
int MaxWorth, MinWorth
int x_move0, x_move1, MaxLength = 0;
int x0, y0, X, Y, número de registros; p>
Boolean Mouse_Move, Name _ Change = true p>
int JX _cinco 1, JX _cinco 2, JX _ diez 1, JX _ doce;
Public void init()
{
TextField texto 1 = new TextField();
Subproceso M _ pointThread = null
establecer diseño (nulo); //Declarar administrador de diseño
this . set background(color . white);//Establecer el color de fondo
this . set foreground(color . black);//Establecer el texto color
for(int I = 1;i<10;I++) //El siguiente bucle se utiliza para agregar etiquetas al diseño.
{
Etiqueta[I]= nueva etiqueta();
this.add(label[I]);
Etiqueta [i]. Reformar(i*80-65,10,50,15);
if(i==2){label[i]. Dar forma(80,10,70,15);}
if(i==7){label[i]. Forma (510, 10, 80, 15);}
If (i & gt7){label[i].
Shaping ((i-8)*4945, 380, 70, 15);}
}
FileName = "000001" //Código de stock predeterminado cuando se inicia el programa.
Name_Str= "Índice compuesto de Shanghai";
this add(text 1); //Agrega el cuadro de texto al diseño
text 1. ( 150, 385, 70, 20);
texto 1. gettext();