麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 97精品国产高清在线看入口 | 91成人免费| 手机视频在线播放 | 黄污污网站| 热@国产| 免费一级毛片在线播放视频老 | 91在线精品亚洲一区二区 | 欧美一级毛片美99毛片 | 久在线草 | 久久久久免费精品 | 污黄视频在线播放 | 精品中文字幕在线观看 | 久久国产精品二区 | 精品国产一区二区三区在线 | 国产精品一区二av18款 | 中文字幕在线观看日韩 | 欧美一级做性受免费大片免费 | 精品国产一区二 | 91丨九色丨国产在线观看 | 91成人免费网站 | 史上最强炼体老祖动漫在线观看 | 国产精品久久久久久久四虎电影 | 成人福利在线播放 | 国内精品免费一区二区2001 | 懂色av懂色aⅴ精彩av | 成人激情在线观看 | 免费午夜视频在线观看 | 中国嫩模一级毛片 | 国产流白浆高潮在线观看 | 成人毛片一区 | 人人做人人看 | 97久久人人超碰caoprom | 国产精品久久久久久久不卡 | 欧美成人a | 欧美日韩亚州综合 | 久久一级 | 欧美黄色一级片在线观看 | 日韩中字幕| 我爱我色成人网 | 国产精品爱久久久久久久 | 国产精品性夜天天视频 |