Este artigo apresenta o processo detalhado do Java Writing Bloco de notas com base no SWT. É compartilhado com você para sua referência. O conteúdo específico é o seguinte
Ele pode realizar as funções básicas do desktop no bloco no sistema Windows, no ensino de tolo e na operação passo a passo. Xiaobai também pode escrever um aplicativo completo sozinho.
Ferramentas necessárias: Eclipse (com plug-in SWT)
O produto acabado é o seguinte:
Função de aplicativo Introdução:
Análise funcional:
O menu de arquivo inclui
1.1. Crie (n) Ctrl+n
1.2PEN (O) Ctrl+o
1.3SAVE (S) Ctrl+S.
1.4Save como (a)
1.5 saída (x)
O menu de edição inclui:
2.1 Desfazer (u) ctrl+z
2.2 cisalhamento (t) ctrl+t
2.3 Cópia (c) Ctrl+C
2.4 Colar (P) Ctrl+V
2.5 Excluir (l) del
2.6 Encontre (d) Ctrl+F
2.7 Encontre o próximo lugar (n) f3
2.8 Substitua (R) Ctrl+H
2.9 Vá para (g) Ctrl+G
2.10 Selecione todos (a) Ctrl+A
2.11 Hora/data (d) F5
O menu de formato inclui
3.1 Wrap Automatic Line (W)
3.2 Fonte (F)
O menu de exibição inclui
4.1 Barra de status (s)
O menu de ajuda inclui
5.1 Ver ajuda (h)
5.2 Sobre o bloco de notas (a)
Em seguida, ensinarei você passo a passo para escrever um bloco de notas com várias categorias específicas da seguinte maneira:
1.Notepad.Java
Esta aula é a principal classe de interface, que contém os eventos de escuta de cada botão
2. Classe Util.java Esta classe é uma classe auxiliar, que facilita os membros de chamada definidos na classe principal da janela em outras classes.
3. Abounalhor.java
Sobre a aula do autor, uma janela de diálogo para exibir informações do autor
4.FindWindow.java
Uma janela de diálogo para a função de pesquisa
5.go_to.java
Vá para uma janela de diálogo da função
6.penmethod.java
Existem duas maneiras de abrir um arquivo encapsulado
7.savamethod.java
Duas maneiras de salvar arquivos
8.SwtrsourceManager.java
Esta classe é uma classe importada externamente e é usada para carregar imagens
9.Test.Java
Entrada do programa, arquivos convenientes de jar pacote posterior
10.QuitMethod.java
Duas maneiras de fechar a janela são encapsuladas
Etapas de escrita:
um. Crie um novo projeto SWT e crie a primeira janela
Eclipse aberto, new-> Other-> Windowbuilder-> SWT Designer-> Swt/Jface Java Project. Nomeie o nome do projeto no bloco de notas
Abra o projeto Notepad recém-criado, clique com o botão direito do mouse em pacote em SCR para criar um novo pacote, chamado com.chance.org
Dicas: As regras de nomeação dos pacotes são melhor usadas para usar o COM. Custom.org. Não pergunte por que, você entenderá depois de trabalhar no futuro.
Clique com o botão direito do mouse no pacote recém-criado new-> Other-> Windowbuilder-> SWT Designer-> SWT-> Nome da janela do aplicativo Notepad
Nesse ponto, construímos a primeira janela SWT e clicamos no design no lado direito da fonte para visualizar a interface gráfica do número recém -criado para realizar a programação visual.
Renomeie a propriedade TXT nas propriedades na forma de bloco de notas para: bloco de notas
Arraste o componente Composites em compósitos para o componente do bloco de notas e modifique sua propriedade de layout para Filllayout, ou seja, um layout de preenchimento, para que toda a interface possa ser transformada em um domínio de edição posteriormente. Em seguida, arraste o componente de texto para o componente Composites. Verifique o atributo h_scroll e o atributo v_scroll no estilo de propriedade do componente de texto para true
Descrição: H_Scroll é uma barra de rolagem horizontal, v_scroll é uma barra de rolagem vertical
dois. Defina os rótulos relacionados da barra de menus e o layout geral do formulário
Selecione o componente da barra de menu para arrastá -lo para o formulário principal
1. Defina o primeiro item de menu (arquivo)
Selecione o componente do menu Cascde, arraste -o para o componente da barra de menus e modifique o atributo: modifique o atributo variável para file_menu e modifique o texto para arquivo (f);
1.1 Submenu Configurações: Criar (n) Ctrl+N
Selecione o item de menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para new_file e modifique o texto para: novo (n) ctrl+n;
1.2 Configurações submenu: aberto (o) ctrl+o
Selecione o item do menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para open_file e modifique o texto para: abrir (o) ctrl+o
1.3 Configurações submenu: salvar (o) ctrl+s
Selecione o item do menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para salvar_file e modificar o texto para: salvar (o) ctrl+s
1.4 Submenu de configurações: Salvar como (a)
Selecione o item do menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para salvar_as e modificar o texto para: salvar como (a)
1.5 Configurações submenu: saída (x)
Selecione o item do menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para sair e modifique o texto para: saída (x)
2. Defina o segundo item de menu (editar)
Selecione o componente do menu Cascde, arraste -o para o componente da barra de menus e modifique o atributo: modifique o atributo variável para edit_menu e modifique o texto para editar (e);
2.1 Configurações submenu: desfazer (u) ctrl+z
Selecione o item de menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para desfazer e modificar o texto para: desfazer (u) ctrl+z e alteração Ativar para false;
2.2 Configurações submenu: corte (t) ctrl+t
Selecione o item do menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para cortar e modificar o texto para: corte (t) ctrl+t e alteração Ativar para false;
2.3 Configurações submenu: cópia (c) ctrl+c
Selecione o item do menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para copiar e modificar o texto para: copiar (c) ctrl+c e alterar a habilitação para false;
2.4 Configurações submenu: Cole (P) Ctrl+V
Selecione o item de menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para colar e modificar o texto para: colar (p) ctrl+v
2.5 Configurações submenu: excluir (l) del
Selecione o item do menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para excluir e modificar o texto para: excluir (l) del e alterar a habilitação para false;
2.6 Configurações submenu: encontre (d) ctrl+f
Selecione o item de menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para encontrar e modifique o texto para: encontre (d) ctrl+f e alteração Ativar para false;
2.7 Submenu de configurações: encontre o próximo lugar (n) f3
Selecione o item de menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para find_next e modifique o texto para: Encontre o próximo local (n) f3 e alteração ativa para false;
2.8 Configurações submenu: substitua (r) ctrl+h
Selecione o item de menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para substituir e modifique o texto para: substituir (r) ctrl+h e alterar a habilitação para false;
2.9 Configurações submenu: Vá para (g) Ctrl+G
Selecione o item do menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para go_to e modifique o texto para: ir para (g) ctrl+g
2.10 Configurações submenu: selecione All (a) Ctrl+A
Selecione o item do menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para selecionar e modificar o texto para: selecione All (a) Ctrl+A
2.11 Configurações submenu: hora/data (d) F5
Selecione o item do menu para adicionar ao componente do menu Cascde, modifique o atributo: altere o atributo variável para showdate e modifique o texto para: hora/data (d) f5
3. Defina o terceiro item de menu (formato)
Selecione o componente do menu Cascde, arraste -o para o componente da barra de menus e modifique o atributo: modifique o atributo variável para format_menu e modifique o texto para formatar (o);
3.1 Configurações submenu: embrulho de linha automática (W)
Selecione o item de menu para adicionar ao componente do menu Cascde, modificar o atributo: modifique o atributo variável para auto_enter e modifique o texto para: wrap de linha automática (w)
3.2 Configurações submenu: Fonte (F)
Selecione o item do menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para setFont e modifique o texto para: font (f)
4. Defina o quarto item de menu (visualização)
Selecione o componente do menu Cascde, arraste -o para o componente da barra de menus e modifique o atributo: modifique o atributo variável para view_menu e modifique o texto para visualizar (v);
4.1 Configurações submenu: barra (s) de status (s)
Selecione o item de menu para adicionar ao componente do menu Cascde, modifique o atributo: modifique o atributo variável para o estado e modifique o texto para: barras de status (s)
5. Defina o quinto item de menu (ajuda)
Selecione o componente do menu Cascde, arraste -o para o componente da barra de menus e modifique o atributo: modifique o atributo variável para help_menu e modifique o texto para ajudar (h);
5.1 Submenu Configurações: Veja Ajuda (H)
Selecione o item do menu para adicioná -lo ao componente do menu Cascde, modificar o atributo: altere o atributo variável para lookhelp e modifique o texto para: visualizar ajuda (h)
5.2 Submenu de configurações: sobre o bloco de notas (a)
Selecione o item de menu para adicioná -lo ao componente do menu Cascde, modificar o atributo: altere o atributo variável para o abrigo e modifique o texto para: sobre o bloco de notas (a)
Neste ponto, a renderização de todo o layout da página foi definida da seguinte forma:
Em seguida, implemente várias funções
três. Configurações do menu Teclas de atalho
Introdução à função SetAccelerator () : use a função setaccelerator () para definir as teclas de atalho relevantes. Os parâmetros passados são valores -chave. Por exemplo, a chave de atalho Ctrl+N é definida como: objeto. setaccelerator (swt.ctrl+'n');
O método de configuração F5 da chave de atalho é: Object.SetAccelerator (swt.f5);
A partir disso, podemos definir todas as teclas de atalho necessárias
new_file.setAccelerator (swt.ctrl + 'n'); // Crie um novo atalho de arquivo open_file.setaccelerator (swt.ctrl + 'o'); // salve um atalho de arquivo undo.setaccellerator (swt.ctrl + 'z'); // desfazer um atalho Cut.setAccelerator (swt.ctrl + 't'); // corte um atalho copy.setaccelerator (swt.ctrl + 'c'); // copie um paste de atalho.setaccelerator (swt.ctrl + 'v'); // Cole a chave de atalho Delete.SetAccelerator (swt.del); // Exclua a chave de atalho Find.SetAccelerator (swt.ctrl + 'f'); // Encontre a chave de atalho find_next.setaccelerator (swt.f3); // Encontre a próxima chave de atalho Substituir.SetAccelerator (swt.ctrl + 'h'); // Substitua a chave de atalho go_to.setaccelerator (swt.ctrl + 'g'); // vá para a chave de atalho selectall.setAccelerator (swt.ctrl + 'a'); // selecione todas as teclas de atalho ShowDate.setaccelerator (swt.f5); // Mostra teclas de atalho de tempo
4. Adicione a função de escuta de eventos (1) Classe de arquivo
Adicione a função de escuta de eventos a cada menu do arquivo
1. Adicione o evento de escuta do menu "saída"
Descrição da função: A implementação do acionamento deste menu para sair do aplicativo é relativamente simples. Chame o sistema de função do sistema.Exit (0); Você pode clicar no componente "Horário/data (F5)" no modo de design e clicar
O código do evento é o seguinte:
quit.addSelectionListener (new SelectionAdapter () { / *** Adicione o evento de escuta do menu "exit"* Função Descrição: acionar este menu sairá do aplicativo* / public void widgetSelected (seleçãoEvent e) {System.exit (0);}});Mas é o fato de que é simples? Na verdade, não é o caso de você apenas clicar para sair e sair diretamente. Ainda há dicas ao desistir em um verdadeiro bloco de notas, então o código aprimorado é o seguinte;
public void diyquit () { / *** Ao sair da função, determine se é necessário salvá -lo* / dicas de string; System.out.println (util.shell.getText (). GetText ()); if (util.shell.filedir! = null || util.shell.getText (). getText ()! = "") {// O diretório de arquivos não está vazio, o que significa que há um arquivo aberto. Você precisa perguntar se deve salvá -lo se (util.shell.filedir == null) {tips = "O texto sem título do arquivo mudou. /N"+"Você deseja salvar o arquivo?"; } else {tips = "arquivo" + util.shell.filedir + "o texto de" mudou. /n "+" Você deseja salvar o arquivo? "} int n = joptionpane.showconfirmdialog (null, pontas," bloco de notas ", joptionpane.yes_no_cancel_option); se (n == 0) {// sim 0 retornar 1 cancelar 2 savemethodModModEmody; Sim, salve o arquivo e abra o arquivo} else if (n == 1) {// Retorne no System.exit (0); salvo. /n "+" Você deseja salvar o arquivo? "; int n = joptionpane.showconfirmdialog (null, pontas," bloco de notas ", joptionpane.yes_no_cancel_option); se (n == 0) {// sim 0 retornar 1 cancel Return 2 Savemethod. Salvar o arquivo e abra o arquivo} elimine se (n == 1) {// Retorne no System.exit (0);Defino cada operação no próximo evento de escuta como uma função. O método de adição de eventos de escuta é o mesmo que a primeira etapa. O método de implementação específico é o seguinte:
2. Adicione o menu "salvar como" para ouvir eventos
Descrição da função: acione este menu e o salvar como janela será exibido e salve o arquivo como em outros lugares. Para facilitar a reutilização do código, salve como encapsulá -lo em um método e chamar o código da seguinte forma:
public void Saveas () { / *** Encapsula -o como esse método para facilitar a chamada* / FileDialog Dialog = new Filedialog (util.shell.shell, swt.save); dialog.setFilterPath (System.getProperty ("c: // documentos e configurações")); // Defina o caminho padrão para abrir dialog.setFilterExtensions (new String [] {"*.txt", "*.*"}); // Defina a extensão do arquivo de arquivo aberto Dialog.SetFilternames (new String [] {"Text Files (*.txt)", "todos os arquivos (*.*)"}); // Defina o nome da extensão exibida na caixa suspensa string file = dialog.open (); // Abra a janela e retorne ao diretório de arquivos selecionado pelo usuário if (file! file.trim ())). getName ()); // Obtenha o nome do arquivo (excluindo o caminho) para definir o título FileWriter FileWriter; tente {fileWriter = new FileWriter (File); Bufferwriter out = new bufferwriter (fileWriter); out.write (util.shell.getText (). getText ()); out.Close (); fileWriter.close (); } catch (ioexception e1) {e1.printStackTrace (); }}}3. Adicione o evento de escuta do menu "salvar"
Função Descrição: Quando o menu "Salvar" é acionado, a janela Salvar arquivo aparece e, em seguida, selecione o diretório e insira o nome do arquivo para salvar. Em relação à lógica de salvar, tenho que falar sobre a economia aqui: no começo, eu estava pensando em como determinar se o documento atual é salvo ou salvo. Mais tarde, observei cuidadosamente o bloco de mesa e descobri que a caixa de diálogo apareceu por salvar e salvar o mesmo. Você só precisa fazer uma pequena diferença para determinar se deve salvar ou salvar, pois o julgamento é o seguinte: se for salvo, significa que o arquivo existe e você pode chamar diretamente a função salva. Se o arquivo não existir, significa que o arquivo foi aberto recentemente e o caminho ainda não foi determinado, então salte para salvar como forma.
Primeiro, defina uma string variável global filedir = null; Atribua -o a esvaziar e todos os arquivos não são salvos por padrão. Então, seja para abrir o arquivo ou salvá -lo como um arquivo, o diretório em que o arquivo está localizado (incluindo o nome do arquivo e o nome do sufixo) é gravado no FileDir e, finalmente, determine se o arquivo está vazio no evento de salvamento.
O código é o seguinte:
public void save () { / *** Salvar arquivo* / if (util.shell.filedir! = null) {// significa que o arquivo tem um diretório e o salva diretamente ao salvar, e não há necessidade de exibir util.shell.shell.settext ((new file.shell.shell.filedir.trim ()). // Obtenha o nome do arquivo (excluindo o caminho) para definir o título FileWriter FileWriter; tente {fileWriter = new FileWriter (util.shell.filedir); Bufferwriter out = new bufferwriter (fileWriter); out.write (util.shell.getText (). getText ()); out.Close (); fileWriter.close (); } catch (ioexception e1) {e1.printStackTrace (); }} else {// Caso contrário, ele nunca é salvo e, em seguida, salve como salva de janela (); }}4. Adicione o evento de escuta do menu "aberto"
Descrição da função: Quando o menu "aberto" é acionado, a janela de arquivo aberto aparece e, em seguida, selecione o arquivo para abrir. Para reutilizar o código, o método de abertura é encapsulado no código da função da seguinte forma:
public void OpenFile () {if (util.shell.filedir! = null || util.shell.getText (). getText ()! = "") {string tips = "file" + util.shell.filedir + "O texto de" mudou. /n "+" Você deseja salvar o arquivo? "; int n = joptionpane.showconfirmdialog (null, pontas," bloco de notas ", joptionpane.yes_no_cancel_option); se (n == 0) {// sim 0 retornar 1 cancelar 2 savemethod. Salve o arquivo e abra o arquivo} else if (n == 1) {// retorna não} else if (n == 2) {// return Cancel Return; dialog.setFilterExtensions (new String [] {"*.txt", "*.*"}); // Defina a extensão do diálogo de arquivos abertos.SetFilternames (new String [] {"Arquivos de texto (*.txt)", "todos os arquivos (*.) Diretor de arquivo selecionado pelo Nome do arquivo (NOME) IF (FILE == NULL) {return; Em New BufferReader (FilleReader); e1.printStackTrace ();5. Adicione o "novo" evento de escuta do menu
Descrição da função: Quando o evento for acionado, crie uma nova janela. Se o arquivo atual não for salvo, ele será solicitado a salvá -lo; caso contrário, uma nova página será saltada para gerar.
O princípio de gerar uma nova página: reinicialize o título, Initialize filedir e inicialize o domínio de edição. Aqui você extrai o código para abrir o novo arquivo para um método, que é conveniente chamar o código da seguinte forma:
void OpenNewFile () {if (util.shell.filedir! = null || util.shell.getText (). getText ()! = "") {string tips = "file" + util.fille.filedir + "O texto de" mudou. /n "+" Você deseja salvar o arquivo? "; int n = joptionpane.showconfirmdialog (nulo, pontas," bloco de notas ", joptionpane.yes_no_cancel_option); se (n == 0) {// sim 0 retorno 1 cancel Return 2 Savemethod. Arquivo} elimine se (n == 1) {// retorna} else if (n == 2) {// Retorno Return; Utill.filledir = null;4. Adicione a função de escuta de eventos (2) Classe editorial
Adicione a função de escuta de eventos para cada menu
1. Adicione o menu "Mostrar Tempo" para ouvir eventos
Descrição da função: Quando o evento for acionado, o tempo do sistema será exibido no cursor na caixa de edição: obtenha o tempo atual do sistema, converta -o em um tipo de string e chame o método Text.Append (str) para exibir o tempo após o cursor da caixa de edição.
1.1 Adicione uma função de escuta de eventos para obter o método de tempo atual do sistema: Call SimpleDateFormat Object para formatar a hora e depois a data de chamada para obter a hora.
O problema no início: ele só pode ser adicionado ao final do conteúdo todas as vezes. Se você pensar com cuidado, deverá localizar a posição atual do cursor e, em seguida, use a corda antes do cursor + a string após o cursor e depois exibir -a juntas.
Procurei por um longo tempo e descobri que o getcaretPosition () acabou de retornar como plástico, que deve ser o que obtém a posição atual do cursor. Eu tentei o esperado. O próximo é implementar a tecnologia de splicing de string: s1.substring (0, índice) + s2 + s1.substring (index, s1.length ());
A nova string retornada.
Problemas que surgem: Após a emenda, a saída é gerada diretamente, resultando no conteúdo anterior sendo unido com as novas seqüências mais tarde. Após um longo tempo de mudança, descobri que preciso chamar o método setText (string). Antes da saída, limpe o conteúdo exibido na caixa de edição anterior primeiro. O conteúdo final da função de escuta é o seguinte:
ShowDate.AddSelectionListener (New SelectionAdapter () { /*** Adicione o evento de escuta do menu "Hora e Date"* Função Descrição: Aparente este menu para adicionar o tempo atual do sistema ao final do cursor da caixa de edição* /public void widgetSelected (seleção e); Box // System.out.println (index); getText (). setText ("");A função Splicing String é a seguinte:
public String InsertString (String S1, String S2, int index) { / *** Implemente a função de inserção da string* Os três parâmetros passados são: a string original, a string a ser inserida e a posição de inserção* o retorno é a sequência inserida* / retorna s1.substring (0, Índice) + S2 + S1.ssub }2. Adicione o menu "Selecione All" para ouvir eventos
Função Descrição: acionar este menu para selecionar todas as seqüências de campo de texto
A caixa de edição em Java realmente vem com a função de selecionar tudo. Haha, você pode chamar text.Selectall () diretamente. Estima-se que também haja cópia e colagem prontas. Eu quase esqueci. Depois de selecionar tudo, você precisa determinar se o conteúdo selecionado está vazio. Se não estiver vazio, você precisará definir os botões "excluir" e "cortar" para selecionar opcionalmente todos os códigos da seguinte forma:
selectAll.AddSelectionListener (new SelectionAdapter () { /*** Adicione o evento de escuta do "Selecione All" Menu* Função Descrição: Aparente o menu para selecionar todos os textos no campo de texto e definir os botões "Excluir" e "Corte". if (getText (). getText ()!3. Adicione o evento de monitoramento do menu "Cut"
Função Descrição: acionar este menu, realizar o código do método cut () da caixa de edição que chama diretamente o método cut () da caixa de edição da seguinte forma:
Cut.AddSelectionListener (new SelectionAdapter () { / *** Adicione o evento de escuta do menu "Cut"* Função Descrição: acionar este menu para cortar a string selecionada* / public void widgetSlected (SeleçãoEvent e) {getText (). Cut ();}});4. Adicione o evento de monitoramento do menu "Colar"
Função Descrição: acionar este menu e implementar o código do método PASTE () que chama diretamente a caixa de edição, colando o conteúdo da área de transferência é o seguinte:
paste.addSelectionListener (new SelectionAdapter () { / *** Adicione o evento de escuta do menu "Colar"* Função Descrição: acionar este menu para colar o conteúdo na prancheta na caixa de edição* / public void widGetSelected (seleção e) {getText (). Paste ();}});5. Adicione o menu "cópia" para ouvir eventos
Função Descrição: acionar este menu, implemente o código do método copy () que chama diretamente a caixa de edição, copiando o conteúdo selecionado da seguinte maneira:
copy.addSelectionListener (new SelectionAdapter () { / *** Adicione o evento de escuta do menu "Cut" Menu* Descrição da função: acionar este menu para cortar a string selecionada* / public void widgetSelected (seleçãoEvent e) {text.copy ();}6. Adicione o evento de monitoramento de menu "desfazer"
Descrição da função: acionar este menu, desfazer a operação atual, desfazer o algoritmo envolvido nessa função é complicado. Por enquanto, este bloco de notas não suporta o método de desfazer o botão, mas suporta o clique com o botão direito do mouse (o componente de texto Java vem com ele quando o clique com o botão direito o desfazer não é escrito por mim, haha)
7. Adicione o menu "encontrar" para ouvir eventos
Descrição da função: acionar este menu e execute a operação de pesquisa
Find.AddSelectionListener (New SelectionAdapter () { / ** * uma caixa de diálogo para adicionar uma função de pesquisa, onde você precisa clicar em encontrar e, em seguida, uma caixa de diálogo aparece, digite o conteúdo relevante da pesquisa * / public void (SwtTeleted (swtEnk);4. Adicione a função de escuta de eventos (3) classe auxiliar
Além de vários eventos de menu na barra de menus, você também precisa ouvir os eventos do teclado. Ou seja, se um teclado digitar um campo de texto, a exibição do menu relevante será acionada: desfazer, pesquisar, encontrar e encontrar o próximo local, substituir esses quatro menus e defini -lo como opcional
1. Escuta dos campos de texto
getText (). AddKeyListener (new KeyAdapter () {/*** Defina eventos de escuta do teclado* Se você tiver uma digitação do teclado, precisar Find_Next.Setenabled (true);2. Implemente a função de escuta do evento do menu "font"
O código é o seguinte:
setFont.addSelectionListener (new SelectionAdapter () { / *** Defina o evento de escuta da fonte* / public void widgetSlected (SelectionEvent e) {fontDialog fontDialog = new FontDialog (swt.None); FONTFONT = getText (). Fontdialog.SetFontlist (OldFont.getFontdata ()); if (OldFont! = NULL) {OldFont.Dispose ();cinco. Configurações de tag de formulário
Extraia a principal função da classe de teste, parametrize o título da forma do bloco de notas e passe um rótulo inicial para a função principal: "UNT intitulado Bloco de notas"
O construtor de parâmetros é definido na classe Main_window, e os parâmetros passados são o construtor de nome do título da seguinte forma:
Main_window (string titleName) { / *** O parâmetro passado com o parâmetro construct é o nome do arquivo* / this.titleName = titleName; } Observe que: o título do software é: Untitled Bloco de notas Ao abrir um arquivo, o título é o nome do arquivo aberto. Ao salvar o nome do arquivo salvo, o título é o nome do arquivo salvo. Ao salvar o nome do arquivo, é o nome do arquivo salvo. O método de obter o nome do arquivo (sem incluir o caminho) é:
shlnotepad.settext ((novo arquivo (filedir.trim ())). getName ()); // Obtenha o nome do arquivo (excluindo o caminho) para definir o título
Por simplicidade, eu a abreviei como um código de frase
Defina o ícone do programa, coloque -o no diretório do projeto e você pode apresentá -lo diretamente para usar
Pensando: Ao solicitar o usuário, para salvar, você não pode apenas observar se o caminho está vazio. Você deve verificar se o teclado foi pressionado, ou seja, se há alguma alteração e se o conteúdo mudou (pode ser um clique com o botão direito do mouse diretamente e não passou pelo teclado)
6. Definição das outras três caixas de diálogo
1. Encontre a caixa de diálogo
Clique com o botão direito do mouse no pacote recém-criado New-> Other-> Windowbuilder-> SWT Designer-> SWT-> Diálogo chamado FindWindow
Os resultados são os seguintes:
Esta janela é compartilhada aqui, a pesquisa, a substituição e a pesquisa pelo próximo local. A caixa de edição de conteúdo de pesquisa pode acionar o botão para clicar. A caixa de edição de conteúdo de pesquisa e a caixa de substituição não estão vazias. A função de substituição pode ser acionada. Aqui está uma lista do próximo local de pesquisa e o corpo do método de substituição para pesquisar no próximo local:
Idéia: primeiro obtenha todas as seqüências de caracteres na janela principal e, em seguida, obtenha o conteúdo que precisa ser pesquisado, chame diretamente a função String de pesquisa fornecida pelo Java para obter o índice inicial e, em seguida, adicione o conteúdo da pesquisa ao comprimento da comprimento da string que é a string que precisa ser renderizada e depois chamar a função de renderização na janela principal para superar a string e depois exibir.
O código específico é o seguinte:
find_next.addSelectionListener (new SelectionAdapter () {@Override public void widgetSelected (SeleçãoEvent e) {parest = util.shell.getText_1 (); // obtenha o conteúdo da caixa de texto principal, o conteúdo do text) -1) {JoptionPane.ShowMessagedialog (NULL, "não encontrado/" "+textContent.getText ()+"/" Índice+TextContent.getText (). Length ();O botão de substituição desencadeia o evento da seguinte maneira;
replaceBtn.addSelectionListener(new SelectionAdapter() { /** * Replace button event*/ public void widgetSelected(SelectionEvent e) { pareStr = Util.shell.getText_1(); //Get the main window text box content pareStr = pareStr.replaceFirst(textContent.getText(), replaceText.getText()); Util.shell.showText (parest);2.
A criação desta caixa de diálogo é a mesma da caixa de diálogo de pesquisa. Nomeie -o sobre o autor. As renderizações específicas são as seguintes:
Esta caixa de diálogo não envolve algoritmos relacionados. Adicione três tags Jlabel e digite três frases.
3. Estabelecimento da caixa de diálogo Go_to
Não vou dizer muito sobre o método de criar uma caixa de diálogo. As renderizações específicas são as seguintes:
A implementação do código é a seguinte:
queding.addSelectionListener (new SelectionAdapter () { / *** Confirme para pular para uma determinada linha* / public void widgetSelected (seleçãoEvent e) {int n = integer.parseInt (goto_line.getText ()); goto_line.settxt ("" + n + ");Ligue para o método gotooneline () na janela principal
public void gotooneline (int linha) {getText (). setSelection (linha); }Neste ponto, as funções gerais de todo o bloco foram concluídas
7. Resumo
Desde o início da escrita até a conclusão final, levou cerca de 2-3 dias. Aprendi muitos algoritmos relacionados. A programação Java é muito conveniente. Muitos métodos não precisam ser implementados por mim. Você pode chamá -los diretamente. No entanto, Java também tem muitas deficiências. Por exemplo, usei a caixa de diálogo de propriedade da Java para fechar a janela. 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 exemplo:
母串为“ab记事本def3g” 需要从”3”这个字符串开始向前查找”记事本”字符串,可将母串中”3”字符串所在位置之前的字符串”ab记事本def”完全倒置为”g3fed本事记ba” 将查找内容也倒置成”本事记” 再调用Java内带的字符串查找函数查找所在位置,再还原即可。
以上就是手把手编写记事本的详细步骤,Java基于SWT插件编写桌面记事本应用程序,希望对大家的学习有所帮助。