English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在学习了Java事件之后,自己编写了一个非常简单的记事本。使用了MenuBar,Menu,MenuITem等控件,事件包括ActionListener以及KeyListener。
代码如下:
package com.package3; /* * 功能:简易记事本的开发,可以保存文件,打开文件,退出记事本 * author:ywq */ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class MenuText { //定义组件: JFrame f; MenuBar mb; //菜单栏 Menu mu; //菜单 JTextArea jta; MenuItem openItem, saveItem, closeItem; //子菜单 FileDialog openDia,saveDia; //弹出保存和打开对话框 File file; //构造函数 public MenuText() { //调用初始化函数 init(); } //执行组件初始化操作 public void init() { f=new JFrame("简易记事本"); mb=new MenuBar(); mu=new Menu("文件"); openItem=new MenuItem("打开"); saveItem=new MenuItem("保存"); closeItem=new MenuItem("Sair"); jta=new JTextArea(); f.add(jta); //Adicionar mu.add(openItem); mu.add(saveItem); mu.add(closeItem); mb.add(mu); f.setMenuBar(mb); openDia=new FileDialog(f, "Abrir", FileDialog.LOAD); saveDia=new FileDialog(f, "Salvar", FileDialog.SAVE); // 200, 300, 500, 400); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); //Chamar a função de evento event(); } //Função de evento, para lidar com o evento public void event() { //Opção de abrir openItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //Chamar o método de abrir o arquivo openFile(); } }); //Opção de salvar saveItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //Chamar o método de salvar o arquivo. saveFile(); } }); //Adicionar um evento de área de texto, ou seja, pressionar Ctrl+S pode salvar //Porque há várias maneiras de ouvir eventos de teclado, e precisamos apenas de uma delas, então podemos usar o adaptador KeyAdapter, //Portanto, é necessário implementar apenas um método jta.addKeyListener(new KeyAdapter() { //Método de tecla pressionada public void keyPressed(KeyEvent e){ if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S) { //Chamar o método de salvar o arquivo. saveFile(); //JOptionPane.showMessageDialog(null, "Certo"); } } }); //Fechar opção closeItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //Sair do sistema System.exit(0); } }); } //Método de abertura de texto public void openFile() { openDia.setVisible(true); //Definir para que ele seja exibido //Obter caminho e nome do arquivo String dirPath = openDia.getDirectory(); String fileName = openDia.getFile(); //Prevenir erros ao clicar em Cancelar if (dirPath == null || fileName == null) return ; jta.setText(""); //Limpar área de texto file = new File(dirPath, fileName); //Criar objeto de arquivo //Ler dados linha a linha, exibir no área de texto try { BufferedReader br = new BufferedReader(new FileReader(file)); String line = null; while ((line = br.readLine()) != null) { jta.append(line+"\r\n"); } br.close(); } catch (IOException ex) { throw new RuntimeException("Falha ao ler"); } } //Método de salvamento de texto. public void saveFile() { //Primeiro, verifique se o arquivo existe if (file == null) { saveDia.setVisible(true); String dirPath = saveDia.getDirectory(); String fileName = saveDia.getFile(); //Prevenir erros ao clicar em Cancelar if (dirPath == null || fileName == null) return ; //Pois o arquivo não existe. Portanto, é necessário criar o objeto file file = new File(dirPath, fileName); } //Escrever dados no arquivo try { BufferedWriter bw = new BufferedWriter(new FileWriter(file)); String info = jta.getText(); //Obter informações da área de texto bw.write(info); //Operação de escrita bw.flush(); bw.close(); } catch (IOException e1) { throw new RuntimeException(); } } public static void main(String[] args) {}} //Criar objeto new MenuText(); } }
O resultado da execução é mostrado na figura a seguir:
As funcionalidades implementadas neste programa incluem:
(1) pode abrir um arquivo específico e editá-lo
(2) pode salvar o arquivo editado
(3) pode usar Ctrl+) pode salvar o texto com S
(4) você pode clicar em closeItem para sair do programa.
EmImplementar funcionalidade3Quando, para a área de texto, adicionou KeyListener, usou o adaptador KeyAdapter para implementar o monitoramento. Mas agora o que é necessário é um monitoramento combinado, ou seja, quando Ctrl e S são pressionados ao mesmo tempo, a operação de salvamento será acionada.
Para monitoramento combinado, o Java API fornece métodos correspondentes.
Encontre o pai direto da classe KeyEvent, que é a classe InputEvent. Como mostrado na figura:
Veja os métodos da classe InputEvent, conforme mostrado a seguir:
O objeto e da classe KeyEvent, subclasse da classe InputEvent, pode chamar o método acima para fazer a decisão. O método isControlDown() é usado para determinar se a tecla Ctrl foi pressionada. Como na lógica do programa if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S), foi implementada uma decisão combinada.
Isso é o conteúdo completo deste artigo, esperamos que ajude no seu aprendizado e que você apóie o tutorial Yell.
Declaração: o conteúdo deste artigo é extraído da Internet, pertence ao autor original, o conteúdo é contribuído e carregado voluntariamente pelos usuários da Internet, o site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade legal relevante. Se você encontrar conteúdo suspeito de violar direitos autorais, bem-vindo a enviar e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar, forneça provas relevantes e, uma vez confirmada, o site deletará imediatamente o conteúdo suspeito de infringir direitos autorais.)