激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務(wù)器之家 - 編程語言 - Java教程 - Java文本編輯器實(shí)現(xiàn)方法詳解

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

2021-07-22 15:40水中魚之1999 Java教程

這篇文章主要介紹了Java文本編輯器實(shí)現(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了java文本編輯器結(jié)構(gòu)、原理、布局、實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下

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

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

  • 界面布局 : editframe
  • main方法所在: edittext
  • 打開功能實(shí)現(xiàn):  filereadthread
  • 保存跟能實(shí)現(xiàn):  save

實(shí)際運(yùn)行效果:

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

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

一、 editframe

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

包括一個(gè)菜單menu

底部:日期時(shí)間

代碼附上:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
public class editframe extends jframe {
 // todo 自動(dòng)生成的構(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;// 滾動(dòng)條
 public editframe() {
 // todo 自動(dòng)生成的構(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è)置滿一行自動(dòng)換行
 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)前時(shí)間: " + 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;
 }
}

二、測(cè)試類 edittext

分兩部分:

1.閃屏 由于加載頁面需要時(shí)間 原想用 splashscreen 由于打包成jar包才能用所以這里用jframe進(jìn)行替代

閃屏圖片直接粘貼到:

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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

選擇文件路徑

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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)另存為,則直接保存到另存為得的目錄下
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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;
 }
}

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

原文鏈接:https://blog.csdn.net/qq_43377749/article/details/85091983

延伸 · 閱讀

精彩推薦
513
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 狠狠婷婷综合久久久久久妖精 | 国产成人精品区一区二区不卡 | 杏美月av | hdhdhdhd19日本人 | 国产亚洲精品久久午夜玫瑰园 | 激情午夜天 | 成人午夜影院 | 91高清视频 | 久久精品国产99久久久古代 | 久久av一区二区 | 欧美爱爱视频网站 | 国产精品一区在线看 | 性生活香蕉视频 | 高清中文字幕在线 | 久草在线网址 | 黄视频网站免费观看 | 精品视频 久久久 | 成人黄色免费视频 | 99影视在线视频免费观看 | 91精品国产综合久久久欧美 | a一级黄色大片 | 国产无限资源在线观看 | 我爱我色成人网 | 色羞羞 | 999精品国产| 毛片免费在线观看 | 国产999精品久久久久 | 热99精品视频 | 久久精品中文字幕一区二区三区 | 国产一区二区三区四区五区在线 | 久久亚洲精品久久国产一区二区 | 亚洲人成电影在线 | 色婷婷久久一区二区 | 免费视频a| 国产精品伊人久久 | av电影院在线观看 | 龙床上的呻吟高h | 人禽l交免费视频观看 视频 | 国产在线精品一区二区夜色 | 羞羞网站在线看 | 免费中文视频 |