⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 文本编辑器.java

📁 Java 图形界面入门实例
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
{ 
Button OK,Cancel; 
I_Method im; 

public W_quit(Frame fr,I_Method qm) 
{ 
super(fr,"Java文本编译器"); 
//setBackground(Color.lightGray); 
setFont(new Font("TimesRoman",Font.BOLD,16)); 
im= qm; 
OK= new Button("确定"); 
Cancel= new Button("取消"); 

Panel pp= new Panel(); 
pp.add(OK); 
pp.add(Cancel); 
add("South",pp); 
add("Center",new Label("Ready to Quit",1)); 
reshape(100,100,200,100); 
} 

public boolean action(Event evt,Object arg) 
{ 
if(evt.target== OK) 
{ 
im.setQuit(); 
dispose(); 
return true; 
}else 
if(evt.target== Cancel) 
{ 
dispose(); 
return true; 
}else 
return super.action(evt,arg); 
} 
} 

class screen 
{ 
public int[] length; 
public int left,right,up,down; 
public int offsetx=0,offsety=0; 
public int w=0,h=0; 
public int maxline; 

public screen() 
{ 
length= new int[300]; 
for(int i=0;i<300;i++) 
{ 
length[i]= 0; 
} 
left= 0; 
up= 0; 
} 

public void setmax(int x,int y) 
{ 
down= y; 
right= x; 
} 
} 

class cusor 
{ 
public int cusorx,cusory;//当前光标的坐标 
public int index;//当前光标对应的偏移 
public int linex,liney;//行列号首地址为1,1linex 
public int oldx,oldy; 
public int w,h; 

public cusor(int y) 
{ 
index= 0; 
cusorx= 3; 
cusory= y; 
linex= liney= 0; 
} 

public void paint(Graphics g) 
{ 
g.setColor(Color.white); 
g.drawLine(oldx,oldy,oldx,oldy-h+2); 
g.setColor(Color.black); 
g.drawLine(cusorx,cusory,cusorx,cusory-h+2); 
oldx= cusorx; 
oldy= cusory; 
} 
} 

class select 
{ 
public char[] sels; 
public int count;// 选中字符的个数 
public int index;//当前光标对应的偏移 
public int linex,liney; 

public select() 
{ 
linex= liney= count= 0; 
sels= new char[1000]; 
} 
} 

//横坐标起始为3 
class P_area extends Canvas 
{ 
public screen sc; 
public cusor cus; 
public select sel; 
private MainF fr; 
public String filename,filedir; 
private Font Ffont= null; 
private Color Bcolor= Color.black; 
private FontMetrics fm; 
private Dimension sz; 

private int fh,fw; 
private int paint_x,paint_y;//用于写字符 
public int totle= 0;//字符总数 
private int lcount=0; 

public boolean border= true;//光标是否在边界 
// private boolean scroll= false; 
public boolean select= false; 
public boolean selold= false;//选中后重画屏幕 
public boolean bfind= false; 

private String findtext= null; 
private int[] findindex; 
private int findcount=0; 
private char[] text; 

public P_area(MainF fr,Font cuf,Color cuc,String fn,String fd) 
{ 
this.fr= fr; 
setBackground(Color.white); 
sz= size(); 
Ffont= cuf; 
setFont(cuf); 
cus= new cusor(sz.height); 
sc= new screen(); 
sel= new select(); 
Bcolor= cuc; 
filename= fn; 
filedir= fd; 
text= new char[5000]; 
findindex= new int[100]; 
repaint(); 
} 

private void draw_downlines(Graphics g,int x,int y,int w,int h) 
{ 
g.setColor(Color.white); 
g.drawLine(x+1,y+h-1,x+w-1,y+h-1); 
g.drawLine(x+w-1,y+h-1,x+w-1,y+1); 

g.setColor(Color.black); 
g.drawLine(x,y,x,y+h); 
g.drawLine(x+1,y+1,x+1,y+h-1); 
g.drawLine(x,y,x+w,y); 
g.drawLine(x+1,y+1,x+w-1,y+1); 
} 

//打开已存在的文件 
public void setname(String fn,String fd) 
{ 
filename= fn; 
filedir= fd; 
} 

public void open(String line) 
{ 
//findtext= line; 
line.getChars(0,line.length()-1,text,totle); 
totle+= line.length(); 
// text[totle]= '\n'; 
// totle++; 
// sc.length[lcount]= line.length()+1; 
// lcount++; 
repaint(); 
} 

public String getText() 
{ 
char[] ret= new char[totle]; 
for(int i=0;i ret[i]= text[i]; 
return (new String(ret)); 
} 

public void movecusor(int x,int y) 
{ 
cus.linex= (int)((x-3)/cus.w); 
cus.liney= (int)((y-3*fh)/cus.h)+1; 
int i=0; 
cus.index=0; 
for(;i< cus.liney+sc.offsety-1;i++) 
cus.index+= sc.length[i]; 
cus.index+=cus.linex-1+sc.offsetx; 
cus.cusorx= (cus.linex-1)*cus.w+3; 
cus.cusory= cus.liney*cus.h; 
cus.paint(getGraphics()); 
} 

public void keycusor(int x,int y) 
{ 
cus.linex+= x; 
cus.liney+= y; 
cus.cusorx+= x*cus.w; 
cus.cusory+= y*cus.h; 
int i=0; 
cus.index=0; 
for(;i cus.index+= sc.length[i]; 
cus.index+=cus.linex-1+sc.offsetx; 
cus.paint(getGraphics()); 
} 

public void add(char ch) 
{ 
if(totle==0) 
totle= 1; 
for(int i= totle;i>=cus.index;i--) 
text[i]= text[i-1]; 
text[cus.index]= ch; 
totle++; 
sc.length[cus.liney]+= 1; 

repaint(); 
if(ch=='\n') 
{ 
cus.linex= 1; 
cus.liney+= 1; 
cus.cusorx= 3; 
cus.cusory= cus.liney*cus.h; 
cus.index++; 
}else 
keycusor(1,0); 
} 

public void adds() 
{ 
totle+= sel.count; 
int i; 
for(i= totle-1;i>(cus.index+sel.count);i--) 
text[i]= text[i-sel.count]; 
for(int j= sel.count;j>0;j--,i--) 
text[i]= sel.sels[j-1]; 
sel.count= 0; 
repaint(); 
} 

public void del(int de) 
{ 
if(de<0) 
{ 
for(int i= cus.index-1;i text[i]= text[i+1]; 
keycusor(-1,0); 
} 
if(de>0) 
for(int i= cus.index;i text[i]= text[i+1]; 
totle--; 
repaint(); 
} 

public void dels() 
{ 
if(sel.count<0) 
{ 
int end= -sel.count; 
for(int i= sel.index;i text[i]= text[i+end+2]; 
} 
if(sel.count>0) 
{ 
int end= sel.index+1; 
for(int i= end;i text[i-sel.count]= text[i]; 
} 
totle-= sel.count; 
//sel.count= 0; 
repaint(); 
} 

public void selrep() 
{ 
draw(getGraphics()); 
} 

public void drag(int x,int y) 
{ 
sel.linex= (int)((x-3)/cus.w); 
sel.liney= (int)((y-3*fh)/cus.h)+1; 
int i=0; 
sel.index=0; 
for(;i< sel.liney+sc.offsety-1;i++) 
sel.index+= sc.length[i]; 
sel.index+=sel.linex-1+sc.offsetx; 
sel.count= sel.index- cus.index+1; 
if(sel.index!= cus.index) 
{ 
select= true; 
selold= true; 
repaint(); 
} 
} 

private void drawselect(Graphics g) 
{ 
int ji= 0; 
paint_x= 3-(int)(sc.offsetx*cus.w); 
paint_y= fh-(int)(sc.offsety*fh); 
for(int i=0;i< totle;i++) 
{ 
if(text[i]=='\n') 
{ 
paint_x = 3-(int)(sc.offsetx*cus.w); 
paint_y+=cus.h; 
i++; 
} 
fw= fm.charWidth(text[i]); 
if(sel.index>cus.index) 
{ 
if((i< totle)&&(i<=sel.index)&&(i>=cus.index)) 
{ 
sel.sels[ji]= text[i]; 
ji++; 
g.setColor(Color.blue); 
g.fillRect(paint_x,paint_y-fh,fw+1,fh); 
g.setColor(Color.white); 
g.drawChars(text,i,1,paint_x,paint_y); 
} 
}else 
if((i< totle)&&(i>=sel.index)&&(i<=cus.index)) 
{ 
sel.sels[ji]= text[i]; 
ji++; 
g.setColor(Color.blue); 
g.fillRect(paint_x,paint_y-fh,fw+1,fh); 
g.setColor(Color.white); 
g.drawChars(text,i,1,paint_x,paint_y); 
} 

paint_x+= fw; 
} 
} 

public void home() 
{ 
cus.linex= 1; 
int i=0; 
cus.index=0; 
for(;i< cus.liney+sc.offsety-1;i++) 
cus.index+= sc.length[i]; 
cus.index+=cus.linex-1+sc.offsetx; 
cus.cusorx= 3; 
cus.paint(getGraphics()); 
} 

public void end() 
{ 
cus.linex= sc.length[cus.liney-1]-1; 
int i=0; 
cus.index=0; 
for(;i< cus.liney+sc.offsety-1;i++) 
cus.index+= sc.length[i]; 
cus.index+=cus.linex-1+sc.offsetx; 
cus.cusorx= (cus.linex-1)*cus.w+3; 
cus.paint(getGraphics()); 
} 

public void pagedown() 
{ 
if(sc.maxline>2*sc.h) 
{ 
sc.offsety+= sc.h; 
fr.vert.setValue(sc.offsety); 
draw(getGraphics()); 
fr.vert.setValue(sc.offsety); 
} 
} 

public void pageup() 
{ 
if((sc.offsety-sc.h)>=0) 
{ 
sc.offsety-=sc.h; 
draw(getGraphics()); 
fr.vert.setValue(sc.offsety); 
} 
} 

public void scrollpaint(int x1,int x2) 
{ 
sc.offsetx= x1; 
sc.offsety= x2; 
// getGraphics().translate(-x1,-x2); 
draw(getGraphics()); 
} 
public void setFont(Font cuf) 
{ 
Ffont= cuf; 
//paint= true; 
repaint(); 
} 

public void setColor(Color col) 
{ 
Bcolor= col; 
// paint= true; 
repaint(); 
} 

public void rep() 
{ 
repaint(); 
} 

private void draw(Graphics g) 
{ 
findtext= new String(text,0,totle); 
int findi= findcount; 
int aa= 0;//用于记录starti 
int c1= 0;//记录行的数目 
int c2= 0;//记录每行的字节数 
int c3= 0; //最大列数 
g.setFont(Ffont); 
g.setColor(Color.white); 
g.fillRect(3,2,sz.width,sz.height); 
g.setColor(Bcolor); 

paint_x= 3-(int)(sc.offsetx*cus.w); 
paint_y= fh-(int)(sc.offsety*fh); 
for(int i=0;i< totle;i++) 
{ 
if(text[i]=='\n') 
{ 
paint_x = 3-(int)(sc.offsetx*cus.w); 
paint_y+=cus.h; 
//i++; 
sc.length[c1]= c2+1; 
c1++; 
if(c2>c3) 
c3= c2; 
c2= 0; 
}else 
if(i< totle) 
{ 
fw= fm.charWidth(text[i]); 
g.setColor(Bcolor); 
g.drawChars(text,i,1,paint_x,paint_y); 
if(i== findindex[findi]&&bfind) 
{ 
if(findi>0) 
findi--; 
g.setColor(Color.blue); 
g.fillRect(paint_x,paint_y-fh+2,fw+1,fh); 
g.setColor(Color.white); 
g.drawChars(text,i,1,paint_x,paint_y); 

} 

paint_x+= fw; 
c2++; 
} 
} 
c1+= 1; 
sc.maxline= c1; 
cus.paint(g); 
if(c3> sc.w) 
fr.horz.setValues(0,sc.w,0,c3-sc.w); 
if(c1> sc.h) 
fr.vert.setValues(0,sc.h,0,c1-sc.h); 
} 

public void update(Graphics g) 
{ 
sz= size(); 
g.setColor(Bcolor); 
g.setFont(Ffont); 
fm= g.getFontMetrics(); 
cus.h= fh= fm.getHeight(); 
cus.w= fw= fm.charWidth('A'); 
sc.h= (int)((sz.height-3)/fh)+1; 
sc.w= (int)((sz.width-3)/fw)+1; 

draw_downlines(g,0,0,sz.width,sz.height); 
//g.clipRect(3,2,sz.width,sz.height); 
if(select) 
{ 
drawselect(g); 
select= false; 
}else 
draw(g); 
} 

public void paint(Graphics g) 
{ 
update(g); 
} 

public boolean mouseEnter(Event evt,int x,int y) 
{ 
fr.setCursor(2); 
return true; 
} 

public boolean mouseExit(Event evt,int x,int y) 
{ 
fr.setCursor(0); 
return true; 
} 

public void find(String find,int dire) 
{ 
bfind= true; 
findcount =0; 
String sss= findtext; 
for(int i=0;i<100;i++) 
findindex[i]= 0; 
int j=0; 
while(true) 
{ 
if(sss.indexOf(find)==-1) 
break; 
findindex[j]= sss.lastIndexOf(find); 
sss= sss.substring(0,findindex[j]); 
j++; 
findcount++; 
} 
repaint(); 
selold= true; 
} 

} 


public class MainF extends Frame implements I_Method 
{ 
private W_quick Lshow; 

private FileDialog openDialog; 
private FileDialog saveDialog; 

public Scrollbar horz,vert; 
private MenuBar menuBar; 
private Panel File_panel,Back_p; 
private Panel Back_panels[]; 

private int screenw,screenh; 
private Color Fcolor= Color.black; 
private Font Ffont= new Font("TimesRoman",Font.PLAIN,14); 
private int Fwidth,Fheight; 
private int[] bookmarks= new int[20]; 
//************** 
public P_area current_t; 
private int i1; 
private int iii=0; 
private boolean insert= false; 
boolean begin= false;//用于标志是否开始选中 
boolean end= false; 
private int sel1= 0; 
private int sel2= 0; 

MenuItem eitem; 
MenuItem eitem1; 
MenuItem eitem2; 
public MenuItem eitem3; 

MainF(String title) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -