/版权所有helj import java.awt.*; import java.io.*; import java.util.*; //W_color;C_str;C_file;C_back;W_find;W_fond
interface I_Method { public void setQuit(); public void setfont(Font f); public void setcolor(Color c); public void Find(String find,int dire); }
class D_color extends Dialog { private Button OK,Cancel; private I_Method mp; private Rectangle test;
private Color current= Color.black; private Color []colors; private Color []colors1; private Color []colors2; private int strlen= 250;
public D_color(Frame fr,I_Method mp,int x,int y) { super(fr,"调色板",true); this.mp= mp; colors= new Color[strlen]; colors1= new Color[strlen]; colors2= new Color[strlen]; for (int i = 0; i < strlen; i++) { float h = ((float)i)/((float)strlen); colors[i] = new Color(Color.HSBtoRGB(h,1.0f,1.0f)); } for (int i = 0; i < strlen; i++) { float h = ((float)i)/((float)strlen); colors1[i] = new Color(Color.HSBtoRGB(1.0f,h,1.0f)); } for (int i = 0; i < strlen; i++) { float h = ((float)i)/((float)strlen); colors2[i] = new Color(Color.HSBtoRGB(1.0f,1.0f,h)); } setLayout(null); OK= new Button("确定"); Cancel= new Button("取消"); OK.reshape(320,100,80,30); add(OK); Cancel.reshape(320,150,80,30); add(Cancel); test= new Rectangle(0,0,300,250); reshape(x/2-210,y/2-140,420,280); show(); }
public void update(Graphics g) { int y= 0; for (int i = 0; i < strlen; i++) { g.setColor(colors[i]); g.fillRect(0,y,100,1); y+=1; } y= 0; for (int i = 0; i < strlen; i++) { g.setColor(colors1[i]); g.fillRect(100,y,100,1); y+=1; } y= 0; for (int i = 0; i < strlen; i++) { g.setColor(colors2[i]); g.fillRect(200,y,100,1); y+=1; } g.setColor(current); g.fillRect(330,30,60,60); } public void paint(Graphics g) { update(g); }
public boolean mouseMove(Event evt,int x,int y) { if(test.inside(x,y)) { Graphics g1= getGraphics(); //g1.drawImage(back,oldx,oldy); //g1.clipRect(x-3,y-3,6,6); g1.setColor(Color.white); g1.drawArc(x-3,y-3,6,6,60,360); g1.drawLine(x-3,y,x+3,y); g1.drawLine(x,y-3,x,y+3); repaint(); //oldx= x-3; //oldy= y-3; return true; } return false; }
public boolean mouseDown(Event evt,int x,int y) { if((x>=0)&&(x<=100)) { current= colors[y]; System.out.println(y); getGraphics().setColor(current); getGraphics().fillRect(330,30,60,60); return true; } if((x>100)&&(x<=200)) { current= colors1[y]; getGraphics().setColor(current); getGraphics().fillRect(330,30,60,60); return true; } if((x>200)&&(x<=300)) { current= colors2[y]; getGraphics().setColor(current); getGraphics().fillRect(330,30,60,60); return true; } return false; }
public boolean action(Event evt,Object arg) { if(evt.target instanceof Button) { if(evt.target== OK) { mp.setcolor(current); dispose(); return true; } if(evt.target== Cancel) { dispose(); return true; } } return super.action(evt,arg); } }
class W_quick extends Window { MainF fr; private Dimension sz; private int w,h; private int fw,fh; private FontMetrics fm; private int index=0;
public W_quick(MainF fr,I_Method qm,int x,int y) { super(fr); this.fr= fr; setBackground(Color.lightGray); }
public void show(int x,int y) { repaint(); reshape(x,y,100,160); show(); }
private void draw_uplines(Graphics g,int x,int y,int w1,int h1) { g.setColor(Color.white); g.drawLine(x,y,x+w1-1,x); g.drawLine(x,y,x,y+h1-1);
g.setColor(Color.black); g.drawLine(x+w1-1,y-1,x+w1-1,y+h1-1); g.drawLine(x+w1-2,y+1,x+w1-2,y+h1-2); g.drawLine(x+1,y+h-2,x+w1-2,y+h1-2); // g.drawLine(x,y+h1-1,x+w1-1,y+h1-1); // g.setColor(Color.black); // g.drawLine(x,y+h1-1,x+w1-1,y+h1-1); } public void paint(Graphics g) { sz= size(); w= sz.width; h= sz.height; // g.setFont(Ffont); fm= g.getFontMetrics(); fh=fm.getHeight(); fw= fm.charWidth('C'); g.setColor(Color.gray); g.drawRect(10,(index-1)*fh+6,w-20,fh); // g.setColor(Color.lightGray); // g.drawRect(0,0,w,h); draw_uplines(g,1,1,w-1,h-1); g.setColor(Color.black); g.drawString("Cut",13,fh); g.drawString("Copy",13,2*fh); g.drawString("Paste",13,3*fh); g.drawString("Delete",13,4*fh); }
public boolean mouseMove(Event evt,int x,int y) { for(int i=1;i<=4;i++) if((y>(i-1)*fh)&&(y<(i*fh))) { index= i; repaint(); } return super.mouseMove(evt,x,y); }
public boolean mouseDown(Event evt,int x,int y) { if(y>0&&y<fh) { fr.current_t.dels(); fr.eitem.enable(false); fr.eitem1.enable(false); fr.eitem3.enable(false); fr.eitem2.enable(true); hide(); return true; } if(y>fh&&(y<(2*fh))) { fr.eitem.enable(false); fr.eitem1.enable(false); fr.eitem3.enable(false); fr.eitem2.enable(true); hide(); return true; } if((y>(2*fh))&&(y<(3*fh))) { fr.current_t.adds(); fr.eitem2.enable(false); fr.eitem.enable(false); fr.eitem1.enable(false); fr.eitem3.enable(false); hide(); return true; } if((y>(3*fh))&&(y<(4*fh))) { fr.current_t.dels(); fr.eitem3.enable(false); fr.eitem.enable(false); fr.eitem1.enable(false); fr.eitem2.enable(false); hide(); return true; } return super.mouseDown(evt,x,y); } }
class ptest extends Panel { String test= "ABCDabcd"; D_font ff;
public ptest(D_font ff) { this.ff= ff; 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 rep() { repaint(); } public void paint(Graphics g) { Dimension sz= size(); Point pt= location(); g.setColor(Color.darkGray); g.drawRect(0,0,sz.width-2,sz.height-2);
g.setColor(Color.white); g.drawLine(1,1,1,sz.height-3); g.drawLine(1,1,sz.width-3,1);
g.drawLine(0,sz.height-1,sz.width-1,sz.height-1); g.drawLine(sz.width-1,0,sz.width-1,sz.height-1);
draw_downlines(g,15,10,sz.width-30,sz.height-20); g.clipRect(16,11,sz.width-31,sz.height-21); g.setColor(Color.black); g.setFont(ff.bf); g.drawString(test,20,sz.height-21); } }
class D_font extends Dialog { public Font bf; private Button OK,Cancel; private Label l1,l2,l3; private String items1[]={"Helvetica","Courier","TimesRoman","Dialog"}; private String items2[]={"PLAIN","BOLD","PLAIN+BOLD","ITALIC","BOLD+ITALIC"}; private int[] style= new int[5]; private String items3[]={"8","9","10","11","12","14","16","18","20","22","24","26","28","36","48","72"}; private TextField f1,f2,f3; private List ll1,ll2,ll3; private ptest test; private I_Method im;
public void init() { style[0]= Font.PLAIN; style[1]= Font.BOLD; style[2]= Font.PLAIN+Font.BOLD; style[3]= Font.ITALIC; style[4]= Font.BOLD+Font.ITALIC; }
public D_font(Frame fr,I_Method qm,int x,int y) { super(fr,"字体",true); init(); setFont(new Font("TimesRoman",Font.PLAIN,14)); im= qm; GridBagLayout gridBag= new GridBagLayout(); GridBagConstraints c= new GridBagConstraints(); setLayout(gridBag); c.insets.left= 4; c.insets.right= 4; c.insets.bottom= 1; c.insets.top= 1; l1= new Label("字体:",Label.LEFT); c.gridwidth= GridBagConstraints.REMAINDER; c.fill= GridBagConstraints.BOTH; c.weightx= 0.0; c.weighty= 0.0; c.gridx=0; c.gridy=0; c.gridwidth=2; c.gridheight =1; gridBag.setConstraints(l1,c); add(l1);
l2= new Label("字体样式:",Label.LEFT); c.gridwidth= GridBagConstraints.REMAINDER; c.fill= GridBagConstraints.BOTH; c.weightx= 0.0; c.weighty= 0.0; c.gridx=2; c.gridy=0; c.gridwidth=1; c.gridheight =1; gridBag.setConstraints(l2,c); add(l2);
l3= new Label("大小:",Label.LEFT); c.gridwidth= GridBagConstraints.REMAINDER; c.fill= GridBagConstraints.BOTH; c.weightx= 0.0; c.weighty= 0.0; c.gridx=3; c.gridy=0; c.gridwidth=1; c.gridheight =1; gridBag.setConstraints(l3,c); add(l3);
OK= new Button("确定"); c.gridwidth= GridBagConstraints.REMAINDER; c.fill= GridBagConstraints.BOTH; c.weightx= 0.0; c.weighty= 0.0; c.gridx=4; c.gridy=1; c.gridwidth=1; c.gridheight =1; gridBag.setConstraints(OK,c); add(OK);
f1= new TextField(); c.gridwidth= GridBagConstraints.REMAINDER; c.fill= GridBagConstraints.BOTH; c.weightx= 0.0; c.weighty= 0.0; c.gridx=0; c.gridy=1; c.gridwidth=2; c.gridheight =1; gridBag.setConstraints(f1,c); add(f1);
f2= new TextField(); c.gridwidth= GridBagConstraints.REMAINDER; c.fill= GridBagConstraints.BOTH; c.weightx= 0.0; c.weighty= 0.0; c.gridx=2; c.gridy=1; c.gridwidth=1; c.gridheight =1; gridBag.setConstraints(f2,c); add(f2);
f3= new TextField(); c.gridwidth= GridBagConstraints.REMAINDER; c.fill= GridBagConstraints.BOTH; c.weightx= 0.0; c.weighty= 0.0; c.gridx=3; c.gridy=1; c.gridwidth=1; c.gridheight =1; gridBag.setConstraints(f3,c); add(f3);
Cancel= new Button("取消"); c.gridwidth= GridBagConstraints.REMAINDER; c.fill= GridBagConstraints.BOTH; c.weightx= 0.0; c.weighty= 0.0; c.gridx=4; c.gridy=2; c.gridwidth=1; c.gridheight =1; gridBag.setConstraints(Cancel,c); add(Cancel);
ll1= new List(); for(int i=0;i<items1.length;i++) ll1.addItem(items1[i]); c.gridwidth= GridBagConstraints.REMAINDER; c.fill= GridBagConstraints.BOTH; c.weightx= 1.0; c.weighty= 1.0; c.gridx=0; c.gridy=2; c.gridwidth=2; c.gridheight =7; gridBag.setConstraints(ll1,c); add(ll1);
ll2= new List(); for(int i1=0;i1<items2.length;i1++) ll2.addItem(items2[i1]); c.gridwidth= GridBagConstraints.REMAINDER; c.fill= GridBagConstraints.BOTH; c.weightx= 0.0; c.weighty= 0.0; c.gridx=2; c.gridy=2; c.gridwidth=1; c.gridheight =7; gridBag.setConstraints(ll2,c); add(ll2);
ll3= new List(); for(int i2=0;i2<items3.length;i2++) ll3.addItem(items3[i2]); c.gridwidth= GridBagConstraints.REMAINDER; c.fill= GridBagConstraints.BOTH; c.weightx= 0.0; c.weighty= 0.0; c.gridx=3; c.gridy=2; c.gridwidth=1; c.gridheight =7; gridBag.setConstraints(ll3,c); add(ll3);
test= new ptest(this); c.gridwidth= GridBagConstraints.REMAINDER; c.fill= GridBagConstraints.BOTH; c.weightx= 1.0; c.weighty= 1.0; c.gridx=0; c.gridy=9; c.gridwidth=5; c.gridheight =4; gridBag.setConstraints(test,c); add(test);
reshape(x/2-210,y/2-140,420,280); show(); }
public boolean action(Event evt,Object arg) { if(evt.target instanceof Button) { if(evt.target== OK) { if(ll1.getSelectedIndex()==-1) ll1.select(0); if(ll3.getSelectedIndex()==-1) ll3.select(0); if(ll2.getSelectedIndex()==-1) ll2.select(0); int size= Integer.parseInt(items3[ll3.getSelectedIndex()]); bf=new Font(items1[ll1.getSelectedIndex()],style[ll2.getSelectedIndex()],size); im.setfont(bf); dispose(); return true; } if(evt.target== Cancel) { dispose(); return true; } }
if(evt.target instanceof List) { if(ll1.getSelectedIndex()==-1) ll1.select(0); if(ll3.getSelectedIndex()==-1) ll3.select(0); if(ll2.getSelectedIndex()==-1) ll2.select(0); f1.setText(ll1.getSelectedItem()); f2.setText(ll2.getSelectedItem()); f3.setText(ll3.getSelectedItem()); int size= Integer.parseInt(items3[ll3.getSelectedIndex()]); bf=new Font(items1[ll1.getSelectedIndex()],style[ll2.getSelectedIndex()],size); test.rep(); return true; } return super.action(evt,arg); } }
class W_quit extends Dialog { 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<totle;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.liney+sc.offsety-1;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<totle;i++) text[i]= text[i+1]; keycusor(-1,0); } if(de>0) for(int i= cus.index;i<totle;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<totle;i++) text[i]= text[i+end+2]; } if(sel.count>0) { int end= sel.index+1; for(int i= end;i<totle;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) { super(title);
Font font= new Font("TimesRoman",Font.BOLD,20); setFont(font); setBackground(Color.lightGray); horz= new Scrollbar(Scrollbar.HORIZONTAL,0,0,0,0); vert= new Scrollbar(Scrollbar.VERTICAL,0,0,0,0);
// show(); addMenu(); init(); Lshow= new W_quick(this,this,0,0); openDialog= new FileDialog(this,"Open File...",FileDialog.LOAD); saveDialog= new FileDialog(this,"Save File...",FileDialog.SAVE); }
private void init() { setLayout(new BorderLayout()); File_panel= new Panel(); File_panel.setBackground(Color.lightGray); Panel pp= new Panel(); pp.setLayout(new BorderLayout(2,2)); current_t= new P_area(this,Ffont,Fcolor,"aa","aa"); pp.add("Center",current_t); pp.add("South",horz); pp.add("East",vert);
add("South",File_panel); add("Center",pp);
Dimension screen_size= Toolkit.getDefaultToolkit().getScreenSize(); screenw=screen_size.width; screenh= screen_size.height-16; reshape(16,16,screen_size.width-32,screen_size.height-32); show(); }
private void addMenu() { menuBar= new MenuBar(); setMenuBar(menuBar);
Menu menu= new Menu("File"); Menu menu1= new Menu("Edit"); Menu menu2= new Menu("Option"); menuBar.add(menu); menuBar.add(menu1); menuBar.add(menu2);
MenuItem fitem= new MenuItem("New"); menu.add(fitem); MenuItem fitem1= new MenuItem("Open"); menu.add(fitem1); MenuItem fitem2= new MenuItem("Close"); menu.add(fitem2); menu.addSeparator(); MenuItem fitem3= new MenuItem("Save"); menu.add(fitem3); MenuItem fitem4= new MenuItem("Save As"); menu.add(fitem4); menu.addSeparator(); MenuItem fitem5= new MenuItem("Quit"); menu.add(fitem5);
menu1.add(new MenuItem("Undo")); menu1.add(new MenuItem("Redo")); menu1.addSeparator(); eitem= new MenuItem("Cut"); menu1.add(eitem); eitem.enable(false); eitem1= new MenuItem("Copy"); eitem1.enable(false); menu1.add(eitem1); eitem2= new MenuItem("Paste"); menu1.add(eitem2); eitem2.enable(false); menu1.addSeparator(); eitem3= new MenuItem("Delete"); menu1.add(eitem3); eitem3.enable(false); MenuItem eitem6= new MenuItem("Bookmark"); menu1.add(eitem6); menu1.addSeparator(); MenuItem eitem4= new MenuItem("Find"); menu1.add(eitem4); MenuItem eitem5= new MenuItem("Repace"); menu1.add(eitem5);
MenuItem oitem= new MenuItem("Color"); menu2.add(oitem); MenuItem oitem1= new MenuItem("Font"); menu2.add(oitem1);
}
public void setQuit() { this.dispose(); System.exit(0); }
public void setfont(Font f) { Ffont= f; current_t.setFont(f); repaint(); }
public void setcolor(Color c) { Fcolor= c; current_t.setColor(c); repaint(); } public void paint(Graphics g) { if(Ffont!= null) g.setFont(Ffont);
}
public void read(String fn,String fd) { current_t.setname(fn,fd); String line= null; String input= null; File s= new File(fd,fn); FileInputStream in= null; DataInputStream datain= null;
try { in= new FileInputStream(s); datain = new DataInputStream(in); }catch(Exception e) { System.out.println("Unable to open file"); return; }
try{ while((line=datain.readLine())!= null) { line+= "\n"; if(input== null) input= line; else input+= line; } }catch(IOException e){ System.out.println("Error in reading file"); } current_t.open(input);
try{ in.close(); }catch(IOException e){ System.out.println("e"); } }
public void write(String fn,String fd) { FileOutputStream out= null; File s= new File(fd,fn);
try{ out= new FileOutputStream(s); }catch(Exception e) { System.out.println("Unable to open file"); return; } PrintStream psOut=new PrintStream(out); psOut.print(current_t.getText());/// try{ out.close(); }catch(IOException e){ System.out.println("e"); } }
public boolean keyDown(Event evt,int key) { System.out.println(key); switch(key) { case 1004://up current_t.keycusor(0,-1); return true; case 1005://down current_t.keycusor(0,1); return true; case 1006: current_t.keycusor(-1,0); return true; case 1007: current_t.keycusor(1,0); return true; case 8: current_t.del(-1); return true; case 127: current_t.del(1); return true; case 1001://end current_t.end(); return true;
case 1000://home current_t.home(); return true; case 1002: current_t.pageup(); return true; case 1003: current_t.pagedown(); return true; } // if(!current_t.border) // current_t.addchar((char)evt.key); // else current_t.add((char)evt.key); return true; }
public boolean mouseDown(Event evt,int x,int y) { //****单击右键*******************不完整 eitem.enable(false); eitem1.enable(false); eitem3.enable(false); current_t.bfind= false; if((evt.modifiers&Event.META_MASK)>0) { Lshow.show(evt.x,evt.y); return false; }else { Lshow.hide(); begin= true; current_t.movecusor(evt.x,evt.y); if(current_t.selold) { current_t.selold= false; current_t.selrep(); } } if(end) { // current_t.rep(); // current_t.paint =true; end= false; } return false; }
public boolean mouseDrag(Event evt,int x,int y) { eitem.enable(true); eitem1.enable(true); eitem3.enable(true); current_t.drag(evt.x,evt.y); //} return true; } public boolean handleEvent(Event evt) { if(evt.id== Event.WINDOW_DESTROY) { W_quit aa= new W_quit(this,this); aa.show(); return true; } switch(evt.id) { case 601: case 602: case 603: case 604: case 605: //current_t.offsety= (vert.getValue()); // current_t.offsetx= (horz.getValue()); // current_t.paint= true; // current_t.rep(); current_t.scrollpaint(horz.getValue(),vert.getValue()); vert.setValue(current_t.sc.offsety); horz.setValue(current_t.sc.offsetx); return true; }
return super.handleEvent(evt); }
public boolean action(Event evt,Object arg) { String filename; if(evt.target instanceof MenuItem) { if(evt.arg.equals("New")) { return true; } if(evt.arg.equals("Open")) { openDialog.show(); String fn= openDialog.getFile(); String filedir= openDialog.getDirectory(); read(fn,filedir); return true; } if(evt.arg.equals("Save")) { write(current_t.filename,current_t.filedir); return true; } if(evt.arg.equals("Save As")) { saveDialog.show(); filename= saveDialog.getFile(); String filedir= openDialog.getDirectory(); write(filename,filedir); return true; } if(evt.arg.equals("Quit")) { System.exit(0); } if(evt.arg.equals("Cut")) { current_t.dels(); eitem.enable(false); eitem1.enable(false); eitem3.enable(false); eitem2.enable(true); return true; } if(evt.arg.equals("Paste")) { current_t.adds(); eitem2.enable(false); eitem.enable(false); eitem1.enable(false); eitem3.enable(false); return true; } if(evt.arg.equals("Copy")) { eitem.enable(false); eitem1.enable(false); eitem3.enable(false); eitem2.enable(true); return true; } if(evt.arg.equals("Delete")) { current_t.dels(); eitem3.enable(false); eitem.enable(false); eitem1.enable(false); eitem2.enable(false); return true; } if(evt.arg.equals("Close")) { current_t.totle= 0; current_t.rep(); return true; } if(evt.arg.equals("Find")) { new outPanel(this); return true; } if(evt.arg.equals("Font")) { new D_font(this,this,screenw,screenh); return true; } if(evt.arg.equals("Color")) { new D_color(this,this,screenw,screenh); return true; } } /*else if(evt.target instanceof Button) { } */ return false; }
public void Find(String find,int dire) { current_t.find(find,dire); System.out.println(find); }
public static void main(String[] args) { MainF ff= new MainF("文本编译器"); } }
class outPanel extends Dialog { MainF fr; Label lbname; //name label TextField tfname; //entry field outlinePanel psex; //two outlined panels] CheckboxGroup cbsex; Checkbox up,down,boxc; //2 radios Button OK, Cancel; //two pushbuttons GridBagConstraints gbc; GridBagLayout gbl; int dire= 1;
public outPanel(MainF fr) { super(fr,"查找",true); this.fr= fr; setFont(new Font("Helvetica", Font.PLAIN, 12)); setBackground(Color.lightGray); gbl =new GridBagLayout(); gbc = new GridBagConstraints(); setLayout(gbl); gbc.ipadx = 5; //make buttons wider gbc.ipady = 3; //make buttons higher gbc.insets.left =6; gbc.insets.right =6; gbc.insets.bottom =4; gbc.insets.top =4; gbc.weightx =1; gbc.weighty =1; lbname = new Label("查找目标:"); //label add_component(lbname, 0,0,1,1); tfname = new TextField(20); //text entry field add_component(tfname, 1,0,3,1); //panel with two buttons for sex boxc= new Checkbox("区分大小写"); add_component(boxc, 0,2,1,1); psex = new outlinePanel(); //first panel add_component(psex, 1,1,3,2); //insert in layout //put two radio buttons in panel up = psex.addCheckbox("向上", false); down = psex.addCheckbox("向下", true); psex.resize(148,53); //add two command buttons to bottom OK = new Button("找下一个"); //buttons at bottom Cancel = new Button("取消"); add_component(OK,4,0,1,1); add_component(Cancel,4,2,1,1); reshape(100,100, 380,146); show(); } //-------------------------------------- private void add_component(Component c, int x, int y, int w, int h) { gbc.gridx = x; gbc.gridy = y; gbc.gridwidth = w; gbc.gridheight =h; add(c); gbl.setConstraints(c, gbc); } //-------------------------------------- public boolean action(Event evt, Object arg) { if(evt.target== OK) { String ss= tfname.getText(); if(boxc.getState()) { ss.toLowerCase(); fr.Find(ss,dire); }else fr.Find(ss,dire); } if (evt.target == Cancel) { dispose(); return true; } if(evt.target== up) { dire=-1; } if(evt.target== down) { dire= 1; } if(evt.target== boxc) { } return super.action(evt, arg); } } //*///======================================= class outlinePanel extends Panel { CheckboxGroup cbg; int yposn; Vector cblist; //-------------------------------------- public outlinePanel() { super(); cbg = new CheckboxGroup(); //for radio buttons setLayout(null); yposn = 3; cblist = new Vector(); } //-------------------------------------- public void reshape(int x, int y, int w, int h) { super.reshape(x,y,w,h); for (int i=0; i< cblist.size(); i++) { Component c = (Component)cblist.elementAt(i); c.reshape(c.location().x, c.location().y, w-6, c.size().height); } } //-------------------------------------- public Component add(Component c) { super.add(c); return c; } //-------------------------------------- public Checkbox addCheckbox(String s, boolean checked) { Checkbox cb = new Checkbox(s, cbg, checked); add(cb); cblist.addElement(cb); cb.reshape(3, yposn, 50, 12); yposn += 15; return cb; } //-------------------------------------- public void paint(Graphics g) { Dimension sz = size(); Point pt = location(); g.setColor(Color.darkGray); // graw rectangle g.drawRect(0, 0, sz.width-2, sz.height-2); //outline gray rectangle with 2 white inner lines g.setColor(Color.white); g.drawLine(1, 1, sz.width-3, 1); g.drawLine(1, 1, 1, sz.height-3); //and two white outer lines g.drawLine(0,sz.height-1,sz.width-1,sz.height-1); g.drawLine(sz.width-1, 0, sz.width-1, sz.height-1); } //-------------------------------------- }

|