Este artículo presenta el proceso detallado del bloc de notas de escritura Java basado en SWT. Se comparte con usted para su referencia. El contenido específico es el siguiente
Puede realizar las funciones básicas del bloc de escritorio en el sistema de Windows, la enseñanza de estilo tonto y la operación paso a paso. Xiaobai también puede escribir una solicitud completa por sí mismo.
Herramientas requeridas: Eclipse (con complemento SWT)
El producto terminado es el siguiente:
Introducción a la función de aplicación:
Análisis funcional:
El menú Archivo incluye
1.1. Crear (n) ctrl+n
1.2open (O) Ctrl+O
1.3save (s) Ctrl+S
1.4save como (a)
1.5 Salida (x)
El menú Editar incluye:
2.1 deshacer (u) ctrl+z
2.2 Shear (T) Ctrl+T
2.3 copia (c) Ctrl+C
2.4 Paste (P) Ctrl+V
2.5 Eliminar (l) del
2.6 encontrar (d) Ctrl+F
2.7 Encuentra el siguiente lugar (N) F3
2.8 Reemplazar (R) Ctrl+H
2.9 Vaya a (G) Ctrl+G
2.10 Seleccione todos (a) Ctrl+A
2.11 hora/fecha (d) F5
El menú de formato incluye
3.1 envoltura de línea automática (W)
3.2 FUENT (F)
El menú Ver incluye
4.1 Barra (s) de estado
El menú de ayuda incluye
5.1 Ver ayuda (h)
5.2 sobre el bloc de notas (a)
A continuación, te enseñaré paso a paso para escribir un bloc de notas con varias categorías específicas de la siguiente manera:
1.notepad.java
Esta clase es la clase de interfaz principal, que contiene los eventos de escucha de cada botón.
2. Util.java Clase Esta clase es una clase auxiliar, que facilita a los miembros de llamadas definidas en la clase de ventana principal en otras clases.
3. About Author.java
Sobre la clase del autor, una ventana de diálogo para mostrar información del autor
4.Findwindow.java
Una ventana de diálogo para la función de búsqueda
5.go_to.java
Vaya a una ventana de diálogo de la función
6.openmethod.java
Hay dos formas de abrir un archivo encapsulado
7.Savamethod.java
Dos formas de guardar archivos
8.swtrsourcemanager.java
Esta clase es una clase importada externamente y se usa para cargar imágenes.
9.test.java
Entrada de programa, convenientes archivos jar de paquete más tarde
10.Quitmethod.java
Se encapsulan dos formas de cerrar la ventana
Pasos de escritura:
uno. Crear un nuevo proyecto SWT y crear la primera ventana
Abra Eclipse, nuevo-> Otro-> WindowBuilder-> SWT Designer-> Proyecto SWT/JFace Java. Nombre el nombre del proyecto Bloc de notas
Abra el proyecto de Bloc de notas recién creado, haga clic con el botón derecho en SCR para crear un nuevo paquete, llamado com.chance.org
Consejos: Las reglas de nomenclatura de los paquetes se usan mejor para usar com. Custom.org. No preguntes por qué, lo entenderás después de trabajar en el futuro.
Haga clic con el botón derecho en el paquete recién creado NUEVO-> OTRO-> WindowBuilder-> SWT Designer-> SWT-> Nombre de la ventana de la aplicación Bloc de notas
En este punto, construimos la primera ventana SWT y hicimos clic en el diseño en el lado derecho de la fuente para ver la interfaz gráfica del número recién creado para realizar la programación visual.
Cambie el nombre de la propiedad txt en las propiedades en el formulario de bloc de notas a: bloc de notas
Arrastre el componente de compuestos en los compuestos en el componente del bloc de notas y modifique su propiedad de diseño para llenar, es decir, un diseño de relleno, para que toda la interfaz se pueda convertir en un dominio de edición más adelante. Luego arrastre el componente de texto al componente de compuestos. Verifique el atributo h_scroll y el atributo v_scroll en el estilo de propiedad del componente de texto a verdadero
Descripción: H_Scroll es una barra de desplazamiento horizontal, v_scroll es una barra de desplazamiento vertical
dos. Establezca las etiquetas relacionadas de la barra de menú y el diseño general del formulario
Seleccione el componente de la barra de menú para arrastrarlo al formulario principal
1. Establezca el primer elemento de menú (archivo)
Seleccione el componente del menú Cascde, arrástrelo al componente de la barra de menú y modifique el atributo: modifique el atributo variable a file_menu y modifique el texto a archivo (f);
1.1 Configuración Submenu: Crear (n) Ctrl+N
Seleccione el elemento del menú para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable a new_file y modifique el texto a: nuevo (n) ctrl+n;
1.2 Configuración Submenu: Abrir (O) Ctrl+O
Seleccione el elemento del menú Para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable a Open_File y modifique el texto a: Open (O) Ctrl+O
1.3 Configuración Submenu: Guardar (O) Ctrl+S
Seleccione el elemento del menú Para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable a save_file y modifique el texto a: guardar (o) ctrl+s
1.4 Configuración Submenu: Guardar como (a)
Seleccione el elemento del menú Para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable a save_as y modifique el texto a: guardar como (a)
1.5 Configuración Submenu: Salida (x)
Seleccione el elemento del menú Para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable para dejar de fumar y modifique el texto a: EXIT (X)
2. Establezca el segundo elemento de menú (editar)
Seleccione el componente del menú Cascde, arrástrelo al componente de la barra de menú y modifique el atributo: modifique el atributo variable a edit_menu y modifique el texto para editar (e);
2.1 Configuración Submenu: deshacer (u) Ctrl+Z
Seleccione el elemento del menú para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable a deshacer y modifique el texto a: deshacer (u) ctrl+z y cambiar habilitar a falso;
2.2 Configuración Submenu: Corte (t) Ctrl+T
Seleccione el elemento del menú para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable a CUT y modifique el texto a: CUT (T) Ctrl+T y cambie Habilitar a False;
2.3 Configuración Submenu: Copia (c) Ctrl+C
Seleccione el elemento del menú para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable a copiar y modifique el texto a: copiar (c) ctrl+c y cambiar la habilitación en falso;
2.4 Configuración Submenu: Paste (P) Ctrl+V
Seleccione el elemento del menú Para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable para pegar y modifique el texto a: pegar (p) ctrl+v
2.5 Configuración Submenu: Eliminar (l) del
Seleccione el elemento del menú Para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable para eliminar y modifique el texto a: eliminar (l) del y cambiar la habilitación en falso;
2.6 Configuración Submenu: Buscar (d) Ctrl+F
Seleccione el elemento del menú para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable para buscar y modifique el texto a: buscar (d) ctrl+f y cambiar habilitar a falso;
2.7 Configuración Submenu: Encuentre el siguiente lugar (n) F3
Seleccione el elemento del menú para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable a find_next y modifique el texto para: Busque el siguiente lugar (n) f3 y cambie a habilitar a falso;
2.8 Configuración Submenu: Reemplazar (R) Ctrl+H
Seleccione el elemento del menú para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable para reemplazar y modifique el texto a: reemplazar (r) ctrl+h y cambiar habilitar a falso;
2.9 Configuración Submenu: Vaya a (G) Ctrl+G
Seleccione el elemento del menú Para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable a Go_TO y modifique el texto a: vaya a (g) Ctrl+G
2.10 Configuración Submenu: seleccione todos (a) Ctrl+A
Seleccione el elemento del menú Para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable a selectall y modifique el texto a: seleccione todo (a) Ctrl+A
2.11 Configuración submenú: hora/fecha (d) F5
Seleccione el elemento del menú Para agregar al componente del menú Cascde, modifique el atributo: cambie el atributo variable a showDate y modifique el texto a: hora/fecha (d) F5
3. Establezca el tercer elemento de menú (formato)
Seleccione el componente del menú Cascde, arrástrelo al componente de la barra de menú y modifique el atributo: modifique el atributo variable a format_menu y modifique el texto a formatear (o);
3.1 Configuración Submenu: envoltura de línea automática (W)
Seleccione el elemento del menú Para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable a auto_enter y modifique el texto a: envoltura de línea automática (w)
3.2 Configuración submenú: fuente (f)
Seleccione el elemento del menú Para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable a setFont y modifique el texto a: fuente (f)
4. Establezca el cuarto elemento de menú (Ver)
Seleccione el componente del menú Cascde, arrástrelo al componente de la barra de menú y modifique el atributo: modifique el atributo variable a ver_menu y modifique el texto para ver (v);
4.1 Configuración Submenú: Barra (s) de estado
Seleccione el elemento del menú Para agregar al componente del menú Cascde, modifique el atributo: modifique el atributo variable al estado y modifique el texto a: barra (s) de estado (s)
5. Establezca el quinto elemento de menú (ayuda)
Seleccione el componente del menú Cascde, arrástrelo al componente de la barra de menú y modifique el atributo: modifique el atributo variable a HELP_MENU y modifique el texto para ayudar (h);
5.1 Configuración Submenu: Ver ayuda (h)
Seleccione el elemento del menú Para agregarlo al componente del menú Cascde, modifique el atributo: cambie el atributo variable a lookHelp y modifique el texto a: ver ayuda (h)
5.2 Configuración Submenú: Acerca de el bloc de notas (a)
Seleccione el elemento del menú para agregarlo al componente del menú Cascde, modifique el atributo: cambie el atributo variable a AboutAuthor y modifique el texto a: About Potepad (a)
En este punto, la representación de todo el diseño de la página se ha establecido de la siguiente manera:
A continuación, implementa varias funciones
tres. Menú Configuración Menú teclas de acceso directo
Introducción a la función setAccelerator () : use la función setaccelerator () para establecer las teclas de acceso directo relevante. Los parámetros pasados son valores clave. Por ejemplo, la tecla de acceso directo CTRL+N se establece como: objeto. setAccelerator (swt.ctrl+'n');
El método de configuración de la clave F5 de acceso directo es: Object.SetAccelerator (SWT.F5);
A partir de esto podemos establecer todas las teclas de acceso directo requerido
new_file.setaccelerator (swt.ctrl + 'n'); // Cree un nuevo archivo Shortcut Open_File.SetAccelerator (SWT.CTRL + 'O'); // Guardar un archivo ShortCut Undo.SetAccelerator (swt.ctrl + 'z'); // deshacer un atajo Cut.SetAccelerator (swt.ctrl + 't'); // cortar un atajo copy.setAccelerator (swt.ctrl + 'c'); // Copiar un atajo Paste.SetAccelerator (SWT.CTRL + 'V'); // Pegue la tecla de acceso directo Delete.SetAccelerator (SWT.DEL); // Eliminar la tecla de acceso directo Find.SetAccelerator (swt.ctrl + 'f'); // Encuentra la tecla de acceso directo Find_Next.SetAccelerator (swt.f3); // Encuentra la siguiente tecla de acceso directo reemplazar.setAccelerator (swt.ctrl + 'h'); // Reemplazar la tecla de acceso directo GO_TO.SetAccelerator (SWT.CTRL + 'G'); // vaya a la tecla de acceso directo selectAll.setAccelerator (swt.ctrl + 'a'); // seleccione todas las teclas de acceso directo showdate.setAccelerator (swt.f5); // Mostrar teclas de acceso directo
4. Agregar función de escucha de eventos (1) Clase de archivo
Agregar función de escucha de eventos a cada menú del archivo
1. Agregue el evento de escucha del menú "Salir"
Descripción de la función: La implementación de activar este menú para salir de la aplicación es relativamente simple. Llamar a la función del sistema System.exit (0); Puede hacer clic en el componente "hora/fecha (F5)" en el modo de diseño y luego hacer clic en "Show Event"-> Selección-> WidgetSelected de doble clic
El código del evento es el siguiente:
Quit.addselectionListener (nuevo selectionAdapter () { / *** Agregue el evento de escucha del menú "Salir" del menú* Descripción: activar este menú saldrá de la aplicación* / public void widgetSelected (selectionEvent e) {system.exit (0);}});¿Pero es el hecho simple? De hecho, no es el caso que puede hacer clic para salir y luego salir directamente. Todavía hay pistas al dejar de fumar en un bloc de notas real, por lo que el código mejorado es el siguiente;
public void diyQuit () { / *** Al salir de la función, determine si es necesario guardarlo* / String Tips; System.out.println (util.shell.gettext (). GetText ()); if (util.shell.filedir! = null || util.shell.gettext (). getText ()! = "") {// El directorio de archivos no está vacío, lo que significa que hay un archivo abierto. Debe preguntar si debe guardarlo si (util.shell.filedir == null) {tips = "El texto sin título del archivo ha cambiado. /N"+"¿Quieres guardar el archivo?"; } else {tips = "file" + util.shell.filedir + "El texto de" ha cambiado. /n "+" ¿Quieres guardar el archivo? "} int n = joptionPane.showConfirmDialog (null, tips," notepad ", joptionPane.yes_no_cancel_option); if (n == 0) {// return 0 no return 1 cancelar return 2 savemethod savemethod = new savemethod ();; Guardar el archivo y abrir el archivo} else if (n == 1) {// return no system.exit (0); Los consejos = "El texto sin título del archivo ha cambiado. /n "+" ¿Quieres guardar el archivo? "; int n = joptionPane.showConfirmDialog (null, tips," notepad ", joptionPane.yes_no_cancel_option); if (n == 0) {// SHE 0 no return 1 cancelar return 2 saveMethod savemethod = new savemethod (); el archivo y abre el archivo} else if (n == 1) {// return no system.exit (0);Defino cada operación en el próximo evento de escucha en función. El método de adición del evento de escucha es el mismo que el primer paso. El método de implementación específico es el siguiente:
2. Agregue el menú "Guardar como" para escuchar eventos
Descripción de la función: active este menú y aparecerá la ventana Guardar como, y guardar el archivo como en otro lugar. Para facilitar la reutilización del código, guárdelo como encapsularlo en un método y llamar al código de la siguiente manera:
public void saveas () { / *** Encapsularlo como este método para facilitar la llamada* / Dialog de archivo Filedialog = new Filedialog (util.shell.shell, swt.save); dialog.setFilterPath (System.getProperty ("c: // documentos y configuraciones"))); // Establezca la ruta predeterminada para abrir dialog.setFilterExtensions (new String [] {"*.txt", "*.*"}); // Establezca la extensión del diálogo de archivo abierto.setFilternames (new String [] {"archivos de texto (*.txt)", "Todos los archivos (*.*)"}); // Establezca el nombre de la extensión que se muestra en el cuadro desplegable String file = dialog.open (); // Abra la ventana y vuelva al directorio de archivos seleccionado por el usuario if (file! = Null) {util.shell.filedir = file; // Guardar el directorio de archivos, use más tarde} if (file! = Null) {util.shell.settext ((nuevo archivo (nuevo archivo ((nuevo archivo ((nuevo archivo ((nuevo archivo (nuevo (nuevo (nuevo (nuevo (nuevo (nuevo archivo (nuevo (nuevo (nuevo (nuevo (nuevo (nuevo (nuevo (nuevo (nuevo (nuevo Directora file.trim ())). getName ()); // Obtenga el nombre del archivo (excluyendo la ruta) para establecer el título FileWriter FileWriter; intente {filewriter = new FileWriter (archivo); BufferedWriter out = new BufferedWriter (FileWriter); out.write (util.shell.gettext (). getText ()); out.close (); FileWriter.Close (); } catch (ioException e1) {e1.printstackTrace (); }}}3. Agregue el evento de escucha del menú "Guardar"
Descripción de la función: Cuando se activa el menú "Guardar", aparece la ventana Guardar archivo y luego seleccione el directorio e ingrese el nombre del archivo para guardar. Con respecto a la lógica del ahorro, tengo que hablar sobre el ahorro aquí: al principio, estaba pensando en cómo determinar si el documento actual se guarda o se guarda como. Más tarde, observé cuidadosamente el bloc de computadoras de escritorio y descubrí que el cuadro de diálogo aparecía al guardar y guardar como es lo mismo. Solo necesita hacer una ligera diferencia para determinar si ahorrar o ahorrar, ya que el juicio es el siguiente: si se guarda, significa que FileDir existe, y puede llamar directamente a la función guardada. Si FileDir no existe, significa que el archivo está recientemente abierto y la ruta aún no se ha determinado, así que salte para guardar como formulario.
Primero, defina una cadena de variable global FilEdir = NULL; Asignarlo a vacío, y todos los archivos no se guardan de forma predeterminada. Luego, ya sea para abrir el archivo o guardarlo como un archivo, el directorio donde se encuentra el archivo (incluido el nombre del archivo y el nombre del sufijo) se registra en FileDir, y finalmente determina si FileDir está vacío en el evento Guardar.
El código es el siguiente:
public void save () { / *** Guardar archivo* / if (util.shell.filedir! = null) {// significa que el archivo tiene un directorio y lo guarda directamente al guardar, y no hay necesidad de emerger util.shell.shell.settext ((nuevo archivo (util.shell.filedir.trim ()))); // Obtener el nombre del archivo (excluyendo la ruta) para establecer el presente FileWriter de Title FileWriter; intente {filewriter = new FileWriter (util.shell.filedir); BufferedWriter out = new BufferedWriter (FileWriter); out.write (util.shell.gettext (). getText ()); out.close (); FileWriter.Close (); } catch (ioException e1) {e1.printstackTrace (); }} else {// de lo contrario, nunca se guarda, luego guarda como ventana saveas (); }}4. Agregue el evento de escucha del menú "abierto"
Descripción de la función: Cuando se activa el menú "Abrir", aparece la ventana Abrir archivo y luego seleccione el archivo para abrir. Para reutilizar el código, el método de apertura se encapsula en el código de función de la siguiente manera:
public void OpenFile () {if (util.shell.filedir! = null || util.shell.gettext (). getText ()! = "") {string tips = "file" + util.shell.filedir + "el texto de" ha cambiado. /n "+" ¿Quieres guardar el archivo? "; int n = joptionPane.showConfirmDialog (null, tips," notepad ", joptionPane.yes_no_cancel_option); if (n == 0) {// SHE 0 no return 1 Cancelar return 2 SaveMethod Savemethod = New Savemethod (); el archivo y abra el archivo} else if (n == 1) {// return no} else if (n == 2) {// return cancel return; dialog.setFilterExtensions (new String [] {"*.txt", "*.*"}); // Establezca la extensión del archivo de archivo abierto. El directorio de archivo seleccionado por el usuario (incluido el nombre del archivo) if (file == null) {return; = new BuffereReader (FileReader); }} Catch (FileNotFoundException e2) {E2.PrintStackTrace ();5. Agregue el evento de escucha del menú "nuevo"
Descripción de la función: Cuando se active el evento, cree una nueva ventana. Si no se guarda el archivo actual, se le solicita que lo guarde, de lo contrario, se saltará una nueva página para generar.
El principio de generar una nueva página: reinicializar el título, inicializar FileDir e inicializar el dominio de edición. Aquí extrae el código para abrir el nuevo archivo en un método, que es conveniente llamar al código de la siguiente manera:
void openNewFile () {if (util.shell.filedir! = null || util.shell.gettext (). getText ()! = "") {String tips = "file" + util.shell.filedir + "el texto de" ha cambiado. /n "+" ¿Quieres guardar el archivo? "; int n = joptionPane.showConfirmDialog (null, tips," notepad ", joptionpane.yes_no_cancel_option); if (n == 0) {// sí volver a retorno 1 cancelar return 2 savemethod savemethod = new Savemethod (); // Archivo} else if (n == 1) {// no} else if (n == 2) {// return Cancelar return; Util.shell.filedir = null;4. Agregar función de escucha de eventos (2) Clase editorial
Agregar función de escucha de eventos para cada menú
1. Agregue el menú "Mostrar tiempo" para escuchar eventos
Descripción de la función: Cuando se activa el evento, el tiempo del sistema se mostrará en el cursor en el cuadro de edición: obtenga el tiempo actual del sistema, conviértalo en un tipo de cadena y luego llame al método Text.append (Str) para mostrar la hora después del cursor de edición del cuadro.
1.1 Agregue una función de escucha para el evento para obtener el método de tiempo actual del sistema: llame al objeto SimpleDateFormat para formatear la hora y luego llame a la fecha para obtener el tiempo.
El problema al principio: solo se puede agregar al final del contenido cada vez. Si lo piensa cuidadosamente, debe localizar la posición actual del cursor y luego empalmar la cadena antes del cursor + la cadena después del cursor, y luego mostrarla junta.
Busqué durante mucho tiempo y descubrí que GetCaretPosition () simplemente regresó como plástico, que debería ser el que obtiene la posición actual del cursor. Lo probé como se esperaba. Lo siguiente es implementar la tecnología de empalme de cadenas: S1.Substring (0, índice) + S2 + S1.substring (index, s1.length ());
La nueva cadena devuelta.
Problemas que surgen: después del empalme, la salida se genera directamente, lo que resulta en que el contenido anterior se empalma con las nuevas cadenas más adelante. Después de un largo tiempo de cambio, descubrí que necesito llamar al método SetText (String). Antes de la salida, borre el contenido que se muestra en el cuadro de edición anterior primero. El contenido final de la función de escucha es el siguiente:
showDate.addSelectionListener (nuevo selectionAdapter () { /*** Agregue el evento de escucha del menú "hora y fecha" de la función* Descripción: activar este menú para agregar el tiempo actual del sistema al final del cursor del cuadro de edición* /public void widgetSelected (selectionEvent e) {int index = gettext (). box // system.out.println (index); getText (). settext ("");La función de cadena de empalme es la siguiente:
public String InsertString (String S1, String S2, Int Index) { / *** Implemente la función Insertar de String* Los tres parámetros pasados en son: la cadena original, la cadena que se insertará y la posición de inserción* la cadena insertada* / return S1.substring (0, index) + s2 + s1.substring (index, s1.lengther ()););); }2. Agregue el menú "Seleccionar todo" para escuchar eventos
Descripción de la función: activar este menú para seleccionar todas las cadenas de campo de texto
El cuadro de edición en Java en realidad viene con la función de seleccionar todo. Jaja, puede llamar a Text.selectall () directamente. Se estima que también hay copia y pegado preparados. Casi lo olvido. Después de seleccionar todo, debe determinar si el contenido seleccionado está vacío. Si no está vacío, debe configurar los botones "Eliminar" y "Cortar" en opcionalmente, seleccionar todos los códigos de la siguiente manera:
selectAll.addSelectionListener (nuevo selectionAdapter () { /*** Agregue el evento de escucha del menú "Seleccionar todo" Descripción: activar el menú para seleccionar todos los textos en el campo de texto y establecer los botones "Eliminar" y "Cortar" a Opcional* /public void widgetSelected (selectionEvent e) {getText (). if (getText ().3. Agregue el evento de monitoreo del menú "cortar"
Descripción de la función: active este menú, realice el código de método Cut () del cuadro Editar que llama directamente el método Cut () del cuadro de edición de la siguiente manera:
Cut.addselectionListener (nuevo selectionAdapter () { / *** Agregue el evento de escucha del menú "CUT" Menú* Descripción: activar este menú para cortar la cadena seleccionada* / public void widgetSelected (selectionEvent e) {getText (). Cut ();}});4. Agregue el evento de monitoreo del menú "pegar"
Descripción de la función: activar este menú e implementar el código de método Paste () que llama directamente el cuadro de edición pegando el contenido del portapapeles es el siguiente:
Paste.addselectionListener (nuevo selectionAdapter () { / *** Agregue el evento de escucha del menú "Pegar" del menú* Descripción: activar este menú para pegar el contenido en el portapapeles en el cuadro Editar* / public void widgetSelected (selectionEvent e) {getText (). paste ();}});5. Agregue el menú "Copiar" para escuchar eventos
Descripción de la función: activar este menú, implementar el código de método copy () que llama directamente al cuadro de edición copiando el contenido seleccionado de la siguiente manera:
copy.addselectionListener (new SelectionAdapter () { / *** Agregue el evento de escucha del menú "Cortar" Descripción de la función: activar este menú para cortar la cadena seleccionada* / public void widgetSelected (selectionEvent e) {text.copy ();}6. Agregue el evento de monitoreo del menú "deshacer"
Descripción de la función: activar este menú, deshacer la operación actual, deshacer el algoritmo involucrado en esta función es complicado. Por el momento, este bloc de notas no es compatible con el método de deshacer de botón, pero admite el clic derecho de deshacer (el componente de texto Java viene con él cuando la deshacer de clic derecho no está escrito por mí, jaja)
7. Agregue el menú "Buscar" para escuchar eventos
Descripción de la función: activar este menú y realizar la operación de búsqueda
find.addselectionListener (new SelectionAdapter () { / ** * Un cuadro de diálogo para agregar una función de búsqueda, donde debe hacer clic en Buscar, y luego aparece un cuadro de diálogo, ingrese el contenido relevante de la búsqueda * / public void widgetSelected (selectionEvent e) {findwindow fw = new Findwindow (shell, swt.dialog); fw.open ();4. Agregar función de escucha de eventos (3) Clase auxiliar
Además de varios eventos de menú en la barra de menú, también debe escuchar eventos de teclado. Es decir, si un teclado escribe un campo de texto, se activará la visualización del menú relevante: deshacer, buscar, encontrar y encontrar el siguiente lugar, reemplazar estos cuatro menús y establecerlo en opcional
1. Escuchar los campos de texto
getText (). AddKeyListener (nuevo KeyAdapter () {/*** Establezca eventos de escucha del teclado* Si tiene un teclado escribiendo, debe configurar los botones relevantes para que sea visible: deshacer, buscar el siguiente lugar*/public void keyReLeed (keyEvent e) {if (getText (). getText ()! = ") {// indicador que está iny. find_next.setenable (true);2. Implemente la función de escucha de eventos del menú "fuente"
El código es el siguiente:
setFont.addSelectionListener (new SelectionAdapter () { / *** Establezca el evento de escucha de la fuente* / public void widgetSelected (selectionEvent e) {fontdialog fontdialog = new fontdialog (shell, swt.none); font oldfont = getText (). FontDialog.SetFontList (OldFont.getFontData (); nulo) {OldFont.Dispose ();cinco. Configuración de la etiqueta de formulario
Extraiga la función principal a la clase de prueba, parametren el título de la forma del bloc de notas y pase una etiqueta inicial a la función principal: "UNT titulado Notepad"
El constructor de parámetros se define en la clase de formulario main_window, y los parámetros aprobados son el constructor de nombre de título de la siguiente manera:
Main_window (string titLename) { / *** El parámetro pasado con la construcción del parámetro es el nombre del archivo* / this.titlename = titLename; } Tenga en cuenta que: el título del software es: Bloc de notas sin título Al abrir un archivo, el título es el nombre de archivo abierto. Al guardar el nombre de archivo guardado, el título es el nombre de archivo guardado. Al guardar el nombre del archivo es el nombre de archivo guardado. El método para obtener el nombre del archivo (sin incluir la ruta) es:
shlnotepad.settext ((nuevo archivo (fileDir.trim ())). getName ()); // Obtenga el nombre del archivo (excluyendo la ruta) para establecer el título
Por simplicidad, lo he abreviado como un código de oración
Establezca el icono del programa, colóquelo en el directorio del proyecto y puede presentarlo directamente para usar
Pensamiento: al solicitar al usuario si guardar, no puede solo mirar si la ruta está vacía. Debe verificar si el teclado ha sido presionado, es decir, si hay algún cambio y si el contenido ha cambiado (puede ser clic derecho para eliminarlo directamente y no ha pasado por el teclado)
6. Definición de los otros tres cuadros de diálogo de diálogo
1. Encuentra el cuadro de diálogo
También haga clic con el botón derecho en el paquete recién creado NUEVO-> OTRO-> WindowBuilder-> SWT Designer-> SWT-> Diálogo llamado FindWindow
Los resultados son los siguientes:
Esta ventana se comparte aquí, la búsqueda, el reemplazo y la búsqueda del siguiente lugar. El cuadro de edición de contenido de búsqueda puede activar el botón para hacer clic. El cuadro de edición de contenido de búsqueda y el cuadro de reemplazo no están vacíos. La función de reemplazo se puede activar. Aquí hay una lista de la búsqueda del siguiente lugar y el cuerpo del método de reemplazo para buscar el siguiente lugar:
Idea: primero obtenga todas las cadenas en la ventana principal, luego obtenga el contenido que debe buscar, llame directamente a la función de cadena de búsqueda proporcionada por Java para obtener el índice de inicio, y luego agregue el contenido de búsqueda a la longitud de la longitud de la cadena que es la cadena que debe ser representada, luego llame a la función de renderización en la ventana principal para renderizar la cadena y luego mostrarlo.
El código específico es el siguiente:
find_next.addselectionListener (new SelectionAdapter () {@Override public void widgetSelected (selectionEvent e) {parestr = util.shell.gettext_1 (); // Obtener el cuadro de texto principal Contenido de la visión de la ventana True Índice = parestr.indexof (textContent.gettext (), index); // Obtenga la posición de la cadena de búsqueda en la cadena de búsqueda en la cadena integral inicial de index ==. -1) {joptionPane.showMessEdialog (nulo, "no encontrado/"+textContent.gettext ()+"/" "," nota índice+textContent.gettext (). longitud ();El botón de reemplazo desencadena el evento de la siguiente manera;
reemplazarBtn.addSelectionListener (new SelectionAdapter () { /*** Evento de botón Reemplazar* /public void widgetSelected (selectionEvent e) {parestr = util.shell.gettext_1 (); // Obtener el cuadro de texto principal de la ventana contenido de text = parestr.RepLaceSterst (textContent.getText (), re ygettext.gettext (); Util.shell.showText (parestr);2. Establecimiento del cuadro de diálogo About Author
La creación de este cuadro de diálogo es la misma que el cuadro de diálogo de búsqueda. Nombrarlo sobre Autor. Las representaciones específicas son las siguientes:
Este cuadro de diálogo no involucra algoritmos relacionados. Agregue tres etiquetas Jlabel e ingrese tres oraciones.
3. CAJO DE DIALOGA DE ESTABLECIMIENTO DE GO_TO
No diré mucho sobre el método de crear un cuadro de diálogo. Las representaciones específicas son las siguientes:
La implementación del código es la siguiente:
Queding.addselectionListener (new SelectionAdapter () { / *** Confirme para saltar a una línea determinada* / public void widgetSelected (selectionEvent e) {int n = integer.parseint (goto_line.gettext ()); goto_line.setText (" + n +" ""); util.gotoonine (1);});Llame al método gotooneline () en la ventana principal
public void getooneline (int row) {getText (). setSelection (fila); }En este punto, las funciones generales de todo el bloc de notas se han completado
7. Resumen
Desde el comienzo de la escritura hasta la finalización final, tomó alrededor de 2-3 días. Aprendí muchos algoritmos relacionados. La programación de Java es muy conveniente. Muchos métodos no necesitan ser implementados por mí mismo. Puedes llamarlos directamente. Sin embargo, Java también tiene muchas deficiencias. Por ejemplo, utilicé el cuadro de diálogo propiedad de Java para cerrar la ventana. The result was particularly stuck. If you are interested, you can customize the exit dialog box. Just change the included three-choice dialog box to a custom dialog box. At the same time, the previous one was only for learning and did not consider the efficiency of the algorithm. For example, opening a file operation, it only implemented the function, but did not consider the timeliness of the algorithm. The method used in this example is to read the file by line. You can try to open a text document with thousands of lines by yourself, and you can feel the importance of the algorithm. Also, upward search has not been implemented. The preliminary idea is: find the coordinates that need to be found, and then start to go back from the position of the coordinates you are looking for, and invert the search content, and then call the string search function that comes with Java.
Por ejemplo:
母串为“ab记事本def3g” 需要从”3”这个字符串开始向前查找”记事本”字符串,可将母串中”3”字符串所在位置之前的字符串”ab记事本def”完全倒置为”g3fed本事记ba” 将查找内容也倒置成”本事记” 再调用Java内带的字符串查找函数查找所在位置,再还原即可。
以上就是手把手编写记事本的详细步骤,Java基于SWT插件编写桌面记事本应用程序,希望对大家的学习有所帮助。