日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 文本编辑器_Java文本编辑器实现方法详解

發布時間:2023/12/14 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 文本编辑器_Java文本编辑器实现方法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

結構分析:

界面布局 : EditFrame

main方法所在: EditText

打開功能實現:? FileReadThread

保存跟能實現:? save

實際運行效果:

附:完整代碼實現

一、 EditFrame

包括一個菜單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進行替代

閃屏圖片直接粘貼到:

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 文本编辑器_Java文本编辑器实现方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。