最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java文本編輯器實現(xiàn)方法詳解

 更新時間:2019年03月13日 12:02:54   作者:水中魚之1999  
這篇文章主要介紹了Java文本編輯器實現(xiàn)方法,結(jié)合實例形式詳細(xì)分析了java文本編輯器結(jié)構(gòu)、原理、布局、實現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下

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

結(jié)構(gòu)分析:

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

實際運行效果:

附:完整代碼實現(xiàn)

一、 EditFrame

包括一個菜單Menu

底部:日期時間

代碼附上:

public class EditFrame extends JFrame {
 // TODO 自動生成的構(gòu)造函數(shù)存根
 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 自動生成的構(gòu)造函數(shù)存根
 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();
 // 設(shè)置 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);// 設(shè)置滿一行自動換行
 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();
  // 轉(zhuǎn)換日期顯示格式
  SimpleDateFormat date = new SimpleDateFormat("yyyy 年 MM 月 dd 日 ");
  jLabelDate.setText("  當(dāng)前日期: " + date.format(new Date(timemillis)));
  SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss ");
  jLabelTime.setText("  當(dāng)前時間: " + 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, "確認(rèn)退出么?", "友情提示", 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, "確認(rèn)退出么?", "友情提示", 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進(jìn)行替代

閃屏圖片直接粘貼到:

2.new 一個EditFrame 對象, 閃屏結(jié)束后設(shè)置為可見

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

調(diào)用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 保存

保存的調(diào)用分三種:

  • 如果該文件是打開的 那么保存到打開文件中
  • 如果該文件還未保存 這調(diào)用:進(jìn)行保存
  • 如果該文件已經(jīng)另存為,則直接保存到另存為得的目錄下
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;
 }
}

更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java字符與字符串操作技巧總結(jié)》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

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

相關(guān)文章

  • Java中ArrayList的常見用法示例小結(jié)

    Java中ArrayList的常見用法示例小結(jié)

    本文介紹了Java的ArrayList,它是一個動態(tài)數(shù)組,可以自動調(diào)整大小,支持添加、刪除、獲取元素等操作,同時,還討論了如何存儲基本數(shù)據(jù)類型以及在多線程環(huán)境下的使用注意事項,感興趣的朋友一起看看吧
    2025-02-02
  • springboot項目數(shù)據(jù)庫配置類DatabaseConfig示例詳解

    springboot項目數(shù)據(jù)庫配置類DatabaseConfig示例詳解

    這篇文章主要介紹了springboot項目數(shù)據(jù)庫配置類DatabaseConfig實現(xiàn)代碼,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • SpringBoot favicon Chrome設(shè)置問題解決方案

    SpringBoot favicon Chrome設(shè)置問題解決方案

    在本篇文章里小編給大家分享的是關(guān)于SpringBoot favicon Chrome設(shè)置問題實例內(nèi)容,小的朋友們可以參考學(xué)習(xí)下。
    2020-02-02
  • Java實現(xiàn)截圖小工具的完整代碼

    Java實現(xiàn)截圖小工具的完整代碼

    這篇文章主要介紹了Java實現(xiàn)截圖小工具的完整代碼,用Java的圖形用戶界面GUI技術(shù)寫了一個電腦截圖小工具,本程序代碼簡單,涉及到異常處理,事件處理,圖形用戶界面等,需要的朋友可以參考下
    2022-05-05
  • SpringBoot淺析安全管理之基于數(shù)據(jù)庫認(rèn)證

    SpringBoot淺析安全管理之基于數(shù)據(jù)庫認(rèn)證

    在真實的項目中,用戶的基本信息以及角色等都存儲在數(shù)據(jù)庫中,因此需要從數(shù)據(jù)庫中獲取數(shù)據(jù)進(jìn)行認(rèn)證和授權(quán)
    2022-08-08
  • java中有無參數(shù)和返回值的方法詳解

    java中有無參數(shù)和返回值的方法詳解

    這篇文章主要介紹了java中有無參數(shù)和返回值的方法詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java中使用Hutool進(jìn)行AES加密解密的方法舉例

    Java中使用Hutool進(jìn)行AES加密解密的方法舉例

    AES是一種對稱加密,所謂對稱加密就是加密與解密使用的秘鑰是一個,下面這篇文章主要介紹了Java中使用Hutool進(jìn)行AES加密解密的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Mybatis批量修改的操作代碼

    Mybatis批量修改的操作代碼

    這篇文章主要介紹了Mybatis批量修改的操作代碼,包括整體批量修改的詳細(xì)代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2017-09-09
  • 詳解Java HashMap實現(xiàn)原理

    詳解Java HashMap實現(xiàn)原理

    HashMap是基于哈希表的Map接口實現(xiàn),提供了所有可選的映射操作,并允許使用null值和null建,不同步且不保證映射順序。本文將記錄一下研究HashMap實現(xiàn)原理。
    2017-01-01
  • eclipse下配置Spring環(huán)境的方法步驟

    eclipse下配置Spring環(huán)境的方法步驟

    這篇文章主要介紹了eclipse下配置Spring環(huán)境的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07

最新評論

莆田市| 唐河县| 汕尾市| 内江市| 察哈| 桑日县| 长汀县| 宁远县| 蒙城县| 临武县| 古浪县| 封丘县| 海盐县| 逊克县| 武清区| 新竹市| 吴旗县| 武威市| 克东县| 青神县| 临夏市| 东光县| 汨罗市| 甘德县| 枣强县| 平定县| 白城市| 临清市| 漠河县| 杭州市| 阳曲县| 沙田区| 辽阳县| 晋城| 岚皋县| 岗巴县| 乌什县| 开阳县| 民县| 固原市| 台州市|