亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java文本編輯器實現方法詳解

2024-07-14 08:43:40
字體:
來源:轉載
供稿:網友

本文實例講述了Java文本編輯器實現方法。分享給大家供大家參考,具體如下:

結構分析:

  • 界面布局 : EditFrame
  • main方法所在: EditText
  • 打開功能實現:  FileReadThread
  • 保存跟能實現:  save

實際運行效果:

Java,文本編輯器

附:完整代碼實現

一、 EditFrame

Java,文本編輯器

包括一個菜單Menu

底部:日期時間

代碼附上:

public class EditFrame extends JFrame { // TODO 自動生成的構造函數存根 boolean saveFlag = false; File saveFileRoot = null; JFrame jFrame; JPanel jPanelSouth; JMenuBar jMenuBar1; JMenu jMenu1; JMenuItem jMenuItem1; JMenuItem jMenuItem2; JMenuItem jMenuItem3; JMenuItem jMenuItem4; JSeparator jSeparator1; JTextArea jTextArea; JScrollPane scrollPane;// 滾動條 public EditFrame() { // TODO 自動生成的構造函數存根 jFrame = new JFrame("水中魚之1999-文本編輯器"); jPanelSouth = new JPanel(); jMenuBar1 = new JMenuBar(); jMenu1 = new JMenu("文件"); jMenuItem1 = new JMenuItem("打開"); jMenuItem2 = new JMenuItem("保存"); jMenuItem3 = new JMenuItem("另存為"); jMenuItem4 = new JMenuItem("退出"); jSeparator1 = new JSeparator(); jTextArea = new JTextArea(); scrollPane = new JScrollPane(jTextArea); jFrame.setSize(800, 500); jFrame.setLocationRelativeTo(null); jFrame.setVisible(false);  setLayout(); setSouthPanel(); // set relationship for your component setRelationShip(); // 設置 scrollPane for TextArea setScscrollPane(); iniClick(); } private void setRelationShip() { jFrame.add(BorderLayout.CENTER, scrollPane); jFrame.add(BorderLayout.SOUTH, jPanelSouth); jMenu1.add(jMenuItem1); jMenu1.add(jMenuItem2); jMenu1.add(jMenuItem3); jMenu1.add(jSeparator1); jMenu1.add(jMenuItem4); jMenuBar1.add(jMenu1); jFrame.setJMenuBar(jMenuBar1); } private void setLayout() { GridLayout gridLayout = new GridLayout(1, 2); jPanelSouth.setLayout(gridLayout); } private void setScscrollPane() {// jTextArea.setLineWrap(true);// 設置滿一行自動換行 scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); } private void setSouthPanel() { // add time for SouthPanel JLabel jLabelDate = new JLabel("Date"); JLabel jLabelTime = new JLabel("Time"); Timer timeAction = new Timer(1000, new ActionListener() {  public void actionPerformed(ActionEvent e) {  long timemillis = System.currentTimeMillis();  // 轉換日期顯示格式  SimpleDateFormat date = new SimpleDateFormat("yyyy 年 MM 月 dd 日 ");  jLabelDate.setText("  當前日期: " + date.format(new Date(timemillis)));  SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss ");  jLabelTime.setText("  當前時間: " + time.format(new Date(timemillis)));  } }); jPanelSouth.add(jLabelDate); jPanelSouth.add(jLabelTime); timeAction.start(); } private void iniClick() { jFrame.addWindowListener(new WindowListener() {  @Override  public void windowOpened(WindowEvent e) {  // TODO Auto-generated method stub  }  @Override  public void windowIconified(WindowEvent e) {  // TODO Auto-generated method stub  }  @Override  public void windowDeiconified(WindowEvent e) {  // TODO Auto-generated method stub  }  @Override  public void windowDeactivated(WindowEvent e) {  // TODO Auto-generated method stub  }  @Override  public void windowClosing(WindowEvent e) {  // TODO Auto-generated method stub  int x = JOptionPane.showConfirmDialog(null, "確認退出么?", "友情提示", JOptionPane.OK_CANCEL_OPTION,   JOptionPane.WARNING_MESSAGE);  if (x == 0) {   System.exit(0);  }  }  @Override  public void windowClosed(WindowEvent e) {  // TODO Auto-generated method stub  }  @Override  public void windowActivated(WindowEvent e) {  // TODO Auto-generated method stub  } }); jMenuItem4.addActionListener(new ActionListener() {  @Override  public void actionPerformed(ActionEvent e) {  // TODO Auto-generated method stub  int x = JOptionPane.showConfirmDialog(null, "確認退出么?", "友情提示", JOptionPane.OK_CANCEL_OPTION,   JOptionPane.WARNING_MESSAGE);  if (x == 0) {   System.exit(0);  }  } }); jMenuItem1.addActionListener(new ActionListener() {  @Override  public void actionPerformed(ActionEvent e) {  // TODO Auto-generated method stub  FileReadThread fileReadThread = new FileReadThread(EditFrame.this);// 開啟文件讀取線程  fileReadThread.start();  System.out.println(saveFileRoot);  saveFlag = true;  jTextArea.setText("");  } }); jMenuItem3.addActionListener(new ActionListener() {  @Override  public void actionPerformed(ActionEvent e) {  // TODO Auto-generated method stub  Save save = new Save(EditFrame.this);  save.start();  saveFlag = true;  } }); jMenuItem2.addActionListener(new ActionListener() {  @Override  public void actionPerformed(ActionEvent e) {  // TODO Auto-generated method stub  if (!saveFlag) {   Save save = new Save(EditFrame.this);   save.start();   saveFlag = true;  } else {   new Save(EditFrame.this, saveFileRoot);  }  } }); } public JTextArea getjTextArea() { return jTextArea; } public void setjTextArea(JTextArea jTextArea) { this.jTextArea = jTextArea; } public File getSaveFileRoot() { return saveFileRoot; } public void setSaveFileRoot(File saveFileRoot) { this.saveFileRoot = saveFileRoot; } public JFrame getjFrame() { return jFrame; } public void setjFrame(JFrame jFrame) { this.jFrame = jFrame; }}

二、測試類 EditText

分兩部分:

1.閃屏 由于加載頁面需要時間 原想用 SplashScreen 由于打包成jar包才能用所以這里用jframe進行替代

閃屏圖片直接粘貼到:

Java,文本編輯器

2.new 一個EditFrame 對象, 閃屏結束后設置為可見

public class EditText { public static void main(String[] args) { new Thread() {  @Override  public void run() {  // TODO Auto-generated method stub  EditFrame editFrame = new EditFrame();    JFrame jFrame = new JFrame();  JPanel jPanel = new javax.swing.JPanel(){    protected void paintComponent(java.awt.Graphics g){      super.paintComponent(g);      g.drawImage(new ImageIcon("experiment_bac.jpg").getImage(),0,0,400,250,null);    }  };  jFrame.add(jPanel);  jFrame.setVisible(true);  jFrame.setSize(400, 300);  jFrame.setLocationRelativeTo(null);    try {   sleep(1500);  } catch (InterruptedException e) {   // TODO Auto-generated catch block   e.printStackTrace();  }  jFrame.dispose();  editFrame.getjFrame().setVisible(true);  } }.start(); }}

三、FileReadThread

調用swing自帶的 JFileChooser

選擇文件路徑

class FileReadThread extends Thread { private EditFrame test; public FileReadThread(EditFrame test ) { this.test = test; } @Override public void run() { JFileChooser chooser = new JFileChooser("d:/"); chooser.setFileFilter(new FileFilter() {// 定義文件過濾器,僅顯示文件夾和txt文本  @Override  public String getDescription() {  return null;  }  @Override  public boolean accept(File file) {  if (file.isDirectory() || file.getName().endsWith(".txt"))   return true;  return false;  } }); int option = chooser.showOpenDialog(test); if (option == JFileChooser.APPROVE_OPTION) {  File selFile = chooser.getSelectedFile();  try {  BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(selFile), "gbk"));  test.setSaveFileRoot(selFile);  String line = null;  while ((line = reader.readLine()) != null) {   test.getjTextArea().append(line + "/n");   Thread.sleep(30);// 線程暫停,以看到讀取過程效果  }  } catch (Exception e1) {  e1.printStackTrace();  }  JOptionPane.showMessageDialog(test, "讀取完畢"); } }}

四、save 保存

保存的調用分三種:

  • 如果該文件是打開的 那么保存到打開文件中
  • 如果該文件還未保存 這調用:進行保存
  • 如果該文件已經另存為,則直接保存到另存為得的目錄下
public class Save extends Thread { private EditFrame area; private File saveFileRoot = null; public Save(EditFrame area, File saveFileRoot) { System.out.println(saveFileRoot + "123"); String text = area.getjTextArea().getText(); String[] lines = text.trim().split("/n"); try {  PrintWriter out = new PrintWriter(new FileOutputStream(saveFileRoot), true);  for (String line : lines)  out.println(line); } catch (FileNotFoundException e) {  // TODO Auto-generated catch block  e.printStackTrace(); } } public Save(EditFrame area) { this.area = area; JFileChooser chooser = new JFileChooser(); chooser.setCurrentDirectory(new File(".")); chooser.setFileFilter(new FileFilter() {  @Override  public boolean accept(File f) {  return f.getName().toLowerCase().endsWith(".txt");  }  @Override  public String getDescription() {  return "SAVE TO";  } }); int r = chooser.showSaveDialog(area); if (r != JFileChooser.APPROVE_OPTION)  return; File f = chooser.getSelectedFile(); area.setSaveFileRoot(f); String text = area.getjTextArea().getText(); String[] lines = text.trim().split("/n"); try {  PrintWriter out = new PrintWriter(new FileOutputStream(f), true);  for (String line : lines)  out.println(line); } catch (FileNotFoundException e) {  // TODO Auto-generated catch block  e.printStackTrace(); } } public File getSaveFileRoot() { return saveFileRoot; } public void setSaveFileRoot(File saveFileRoot) { this.saveFileRoot = saveFileRoot; }}

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国产亚洲7777| 欧美性猛交丰臀xxxxx网站| 国语自产精品视频在免费| 92看片淫黄大片看国产片| 亚洲高清免费观看高清完整版| 97精品国产97久久久久久| 美日韩丰满少妇在线观看| 久久99精品视频一区97| 日韩av电影手机在线| 欧美日韩国产中字| 国产精品视频一区国模私拍| 国产91精品在线播放| 欧美日韩美女视频| 成人国产亚洲精品a区天堂华泰| 亚洲网在线观看| 欧美巨大黑人极品精男| 久久夜色撩人精品| 欧美视频在线观看免费网址| 国产亚洲精品一区二555| 国产精品久久久久久影视| 日韩美女在线观看一区| 青青a在线精品免费观看| 亚洲精品永久免费精品| 亚洲国产日韩精品在线| 欧美寡妇偷汉性猛交| 91国自产精品中文字幕亚洲| 亚洲性视频网址| 中文字幕亚洲二区| 456国产精品| 日韩有码片在线观看| 日韩欧美在线免费| 成人激情视频在线观看| 国产精品视频白浆免费视频| 国产欧美一区二区三区四区| 亚洲欧美三级伦理| 91夜夜未满十八勿入爽爽影院| 欧美日韩中文在线观看| 亚洲精品久久久久中文字幕二区| 亚洲成人黄色在线观看| 欧美日韩在线第一页| 黄色成人在线免费| 成人福利视频在线观看| 欧美激情一区二区三区成人| 亚洲欧洲成视频免费观看| 性欧美办公室18xxxxhd| 日韩精品在线第一页| 视频在线观看一区二区| 国产精品第100页| 国产福利精品av综合导导航| 欧美做爰性生交视频| 自拍偷拍亚洲一区| 亚洲午夜精品视频| 午夜精品在线视频| 日本一区二区三区四区视频| 亚洲一区二区久久| 亚洲国产成人91精品| 午夜精品久久久久久久男人的天堂| 91久久夜色精品国产网站| 久久久国产一区| 91精品国产高清久久久久久久久| 色偷偷888欧美精品久久久| 久久久免费观看| 欧美日韩免费区域视频在线观看| 成人av.网址在线网站| 国内精品久久久久| 欧美日韩中文字幕在线视频| 国产丝袜一区二区三区| 最近2019免费中文字幕视频三| 一个人看的www久久| 国产精品久久久久久久av电影| 日韩女在线观看| 成人久久一区二区| 91精品中国老女人| 亚洲毛茸茸少妇高潮呻吟| 一区二区在线视频播放| 亚洲国产精品一区二区久| 精品国内亚洲在观看18黄| 亚洲男人的天堂在线| 日韩免费观看在线观看| 久久久久久成人| 免费99精品国产自在在线| 国产手机视频精品| 久热在线中文字幕色999舞| 久久av红桃一区二区小说| 日韩在线观看免费全集电视剧网站| 欧美激情精品久久久久久蜜臀| 久久亚洲综合国产精品99麻豆精品福利| 色99之美女主播在线视频| 国产日本欧美一区二区三区在线| 日韩av在线网址| 精品小视频在线| 国产噜噜噜噜久久久久久久久| 欧美极品欧美精品欧美视频| 日本19禁啪啪免费观看www| 九九视频这里只有精品| 日韩av免费在线观看| 91久久精品国产91性色| 亚洲国产精品久久久久秋霞蜜臀| 成人h视频在线观看播放| 欧美xxxwww| 久久久精品一区| 中文字幕欧美亚洲| 日韩在线国产精品| 色噜噜狠狠狠综合曰曰曰88av| 久久久噜噜噜久噜久久| 18久久久久久| 性欧美亚洲xxxx乳在线观看| 55夜色66夜色国产精品视频| 久久久久亚洲精品| 久久精视频免费在线久久完整在线看| 久久精品亚洲一区| 久久成年人视频| 97婷婷涩涩精品一区| www.精品av.com| 好吊成人免视频| 国产一区二区视频在线观看| 亚洲精品网址在线观看| 91免费精品视频| 国产精品av在线播放| 国产精品成人在线| 亚洲国产成人91精品| 久久久久一本一区二区青青蜜月| 中文字幕欧美日韩va免费视频| 国产精品嫩草影院久久久| 欧美激情视频在线观看| 成人av.网址在线网站| 国产精品久久视频| 成人午夜一级二级三级| 亚洲激情视频在线播放| 亚洲欧洲日产国码av系列天堂| 欧美又大粗又爽又黄大片视频| 黑人巨大精品欧美一区免费视频| 久久久久国色av免费观看性色| 亚洲精选中文字幕| 欧美性生交xxxxx久久久| 大伊人狠狠躁夜夜躁av一区| 精品久久久视频| 国产精品网址在线| 亚洲人午夜色婷婷| 91精品久久久久久久| 欧美日韩国产限制| 精品国偷自产在线视频| 国产va免费精品高清在线| 亚洲高清不卡av| 精品小视频在线| 欧美性猛交xxxx免费看久久久| 日本免费一区二区三区视频观看| 91中文字幕一区| 国产亚洲欧美一区| 成人春色激情网| 亚洲美女av网站| 日韩欧美在线一区| 亚洲人成在线免费观看| 国产亚洲欧洲高清一区| www.亚洲天堂| 亚洲国产97在线精品一区| 国产成人精品电影| 欧美精品久久一区二区| 欧美高跟鞋交xxxxhd| 久久久久久久电影一区| 日本久久中文字幕| 欧美日韩爱爱视频| 精品国偷自产在线视频| 日韩美女写真福利在线观看|