?? 309fbad85739001d1d18b1a5f2bf9836
字號:
package d;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.util.Vector;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class drawbord extends Frame implements ActionListener,MouseMotionListener,MouseListener,Serializable
{
private Button rec,lin,ov,bc,dk,qk,sz,gs,bz,tc,zh,fj,sc;
private Label l1,l2,l3,l4;
int flag=-1;
shap sh;
shap s;
Point m=new Point();
Point sbb=new Point();
Point n=new Point();
Point tsbb=new Point();
Panel bord,bord1;
Vector<shap> al=new Vector<shap>();
Vector<shap> a=new Vector<shap>();
FileInputStream picin = null;
FileOutputStream picout = null;
ObjectInputStream vin = null;
ObjectOutputStream vout = null;
FileDialog openpicture,savepicture;
public drawbord(String s)
{
super(s);
bord=new Panel();
bord1=new Panel();
l1=new Label("文件操作");
l2=new Label("畫圖選項");
l3=new Label("操作說明");
l4=new Label("工具欄");
rec=new Button("畫矩形");
lin=new Button("畫直線");
ov=new Button("畫圓");
bc=new Button("保存圖畫");
dk=new Button("打開圖畫");
qk=new Button("清空");
sz=new Button("選中框");
zh=new Button("組合");
fj=new Button("分解");
gs=new Button("調色板");
bz=new Button("操作說明");
tc=new Button("退出");
sc=new Button("刪除");
bord.add(l1);
bord.add(dk);
bord.add(bc);
bord.add(l2);
bord.add(rec);
bord.add(ov);
bord.add(lin);
bord.add(l3);
bord.add(bz);
bord.add(tc);
bord1.add(l4);
bord1.add(sz);
bord1.add(zh);
bord1.add(fj);
bord1.add(gs);
bord1.add(sc);
bord1.add(qk);
this.add(bord,BorderLayout.NORTH);
this.add(bord1,BorderLayout.SOUTH);
rec.addActionListener(this);
lin.addActionListener(this);
ov.addActionListener(this);
qk.addActionListener(this);
dk.addActionListener(this);
bc.addActionListener(this);
sz.addActionListener(this);
gs.addActionListener(this);
bz.addActionListener(this);
tc.addActionListener(this);
zh.addActionListener(this);
fj.addActionListener(this);
sc.addActionListener(this);
addMouseListener(this);
addMouseMotionListener(this);
openpicture = new FileDialog(this,"打開圖畫",FileDialog.LOAD);
openpicture.setVisible(false);
savepicture = new FileDialog(this,"保存圖畫",FileDialog.SAVE);
savepicture.setVisible(false);
openpicture.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ openpicture.setVisible(false); }
});
savepicture.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ savepicture.setVisible(false); }
});
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ System.exit(0);
}
});
this.validate();
this.setSize(900,600);
this.setLocation(60, 60);
this.setVisible(true);
}
public void paint(Graphics g){
if(flag==0)
{
g.clearRect(0,0,this.getSize().width,this.getSize().height);//清除
al.removeAllElements();
}
if(flag==4){
for(int i=0;i<a.size();i++)
a.get(i).draw(g);
}
for(int j=0;j<al.size();j++)
al.get(j).draw(g);
}
@SuppressWarnings("unchecked")
public void actionPerformed(ActionEvent e) {
if(e.getSource()==sc)
{
for(int i=0;i<al.size();i++)
{
if(al.get(i).isseclect(0))
{
al.removeElementAt(i);
i--;
}
}
this.repaint();
flag=4;
}
if(e.getSource()==zh)
{
zhushap zs=new zhushap();
shap zh;
for(int i=0;i<al.size();i++)
{
if(al.get(i).isseclect(0))
{
zh=al.remove(i);
i--;
zs.addshap(zh);
}
}
if(zs.getsize()!=0){
al.add(zs);
this.repaint();
}
}
if(e.getSource()==fj)
{
shap sa;
zhushap zhp=new zhushap();
int hyp=al.size();
for(int i=0;i<hyp;i++)
{
sa=al.get(i);
if(sa.isseclect(0))
{
if(sa instanceof zhushap)
{
zhp=(zhushap) al.remove(i);
int p=zhp.getsize();
for(int j=0;j<p;j++)
{
al.add(zhp.remove(0));
}
i--;
hyp--;
}
}
}
this.repaint();
}
if(e.getSource()==tc)
{
System.exit(0);
}
if(e.getSource()==bz)
{
JOptionPane.showMessageDialog(null,
"1.如何畫圖:" +
"\n" +
" 點擊所要畫的圖形的按鈕后,用鼠標在面板上" +
"\n"+
"拖動即可畫出圖形,可連續畫出多個圖形,只有畫" +
"\n" +
"圖時鼠標是十字形的。"+
"\n"+
"2.如何選中:" +
"\n" +
" 單擊“選中”按鈕后,在面板上拖動鼠標畫出" +
"\n"+
"一個矩形框來選中你所要選中的圖形,只有圖形完" +
"\n"+
"全被矩形框包圍住才算選中。選中釋放鼠標后圖形" +
"\n"+
"線條會加粗,此時你可以任意拖動圖形,也可以改" +
"\n"+
"變圖形的顏色或是刪除選中的圖形。操作完畢后單"+
"\n"+
"擊面板,圖形線條變細,此時才可以再次執行其他"+
"\n"+
"操作。"+
"\n"+
"3.組合與分解"+
"\n"+
" 選中多個圖形后,點擊組合按鈕,此時這幾個"+
"\n"+
"圖形就是一個整體,以后只有把這個整體全部選中"+
"\n"+
"才算選中。若要撤銷組合,先選中圖形組合,再點"+
"\n"+
"擊分解按鈕即可。"
,"操作說明", JOptionPane.INFORMATION_MESSAGE);
}
if(e.getSource()==rec){
flag=1;
}
if(e.getSource()==lin){
flag=2;
}
if(e.getSource()==ov){
flag=3;
}
if(e.getSource()==qk){
flag=0;
repaint();
}
if(e.getSource()==sz){
flag=4;
}
if(e.getSource()==gs){
flag=-1;
Color newcolor = JColorChooser.showDialog(this,"調色板",Color.BLACK);
if(newcolor==null)
{
newcolor=Color.BLACK;
}
else{ for(int hy=0;hy<al.size();hy++)
{
if(al.get(hy).isseclect(0))
{
al.get(hy).ischangcolor(0);
al.get(hy).getshapecolor(newcolor);
}
}
this.repaint();
for(int hy1=0;hy1<al.size();hy1++)
{
if(al.get(hy1).isseclect(0))
al.get(hy1).ischangcolor(1);
}
for(int hy2=0;hy2<al.size();hy2++)
{
if(al.get(hy2).isseclect(0))
al.get(hy2).isseclect(1);
}
}
flag=4;
}
if(e.getSource()==dk){
openpicture.setVisible(true);
if(openpicture.getFile()!=null)
{
int tempflag;
tempflag = flag;
flag = 0 ;
repaint();
try{
al.removeAllElements();
File filein = new File(openpicture.getDirectory(),openpicture.getFile());
picin = new FileInputStream(filein);
vin = new ObjectInputStream(picin);
Vector<shap> readObject = (Vector<shap>) vin.readObject();
al = readObject;
vin.close();
flag = -1;
repaint();
}
catch(ClassNotFoundException ioe2)
{
repaint();
flag = tempflag;
JOptionPane.showMessageDialog(null, "不能讀的對象!!");
}
catch(IOException ioe)
{
repaint();
flag = tempflag;
JOptionPane.showMessageDialog(null, "不能讀的文件!!");
}
}
}
if(e.getSource()==bc){
savepicture.setVisible(true);
try{
File fileout = new File(savepicture.getDirectory(),savepicture.getFile());
picout = new FileOutputStream(fileout);
vout = new ObjectOutputStream(picout);
vout.writeObject(al);
vout.close();
}
catch(IOException ioe)
{
JOptionPane.showMessageDialog(null, "不能讀的對象!!");
}
}
}
public void mouseDragged(MouseEvent e) {
if(flag!=-1&&flag!=4&&flag!=5&&flag!=6)
{
sh.setPe(e.getPoint());
this.repaint();
}
if(flag==4){
s.setPe(e.getPoint());
this.repaint();
}
if(flag==6){
for(int k=0;k<al.size();k++)
{
if(al.get(k).isseclect(0))
{
al.get(k).xzmove(e.getPoint().x-tsbb.x,e.getPoint().y-tsbb.y);}
}
this.repaint();
}
}
public void mousePressed(MouseEvent e) {
switch(flag){
case 1: this.setCursor(Frame.CROSSHAIR_CURSOR);
sh=new shaprec(e.getPoint(),e.getPoint());
sh.setPe(e.getPoint());
al.add(sh);
m=e.getPoint();
break;
case 2: this.setCursor(Frame.CROSSHAIR_CURSOR);
sh=new shapline(e.getPoint(),e.getPoint());
sh.setPe(e.getPoint());
al.add(sh);
m=e.getPoint();
break;
case 3:this.setCursor(Frame.CROSSHAIR_CURSOR);
sh=new shapoval(e.getPoint(),e.getPoint());
sh.setPe(e.getPoint());
al.add(sh);
m=e.getPoint();
break;
case 4: s=new shaprec(e.getPoint(),e.getPoint());
s.setPe(e.getPoint());
a.add(s);
this.sbb=e.getPoint();
break;
case 6:this.tsbb=e.getPoint();
break;
default :
}
}
public void mouseReleased(MouseEvent e) {
if(flag!=-1&&flag!=4&&flag!=5&&flag!=6)
{ this.setCursor(Frame.DEFAULT_CURSOR);
n=e.getPoint();
int len=al.size();
al.get(len-1).setPe(e.getPoint());
al.get(len-1).baocunp(0,m,n,0,0);
this.repaint();
}
if(flag==4){
a.removeAllElements();
flag=5;
for(int js=0;js<al.size();js++)
{
al.get(js).getmou(this.sbb,e.getPoint());
al.get(js).isseclect(0);
}
this.repaint();
int jj=0;
for(int jk=0;jk<al.size();jk++)
{
if(al.get(jk).isseclect(0))
jj++;
}
if(jj==0)
flag=4;
else
flag=6;
return;
}
if(flag==6){
for(int k=0;k<al.size();k++)
{
Point m1=new Point();
Point n1=new Point();
if(al.get(k).isseclect(0))
{
al.get(k).xzmove(e.getPoint().x-tsbb.x,e.getPoint().y-tsbb.y);
al.get(k).baocunp(1,m1, n1,e.getPoint().x-tsbb.x,e.getPoint().y-tsbb.y);
}
}
flag=-1;
this.repaint();
}
}
public void mouseMoved(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
for(int jg=0;jg<al.size();jg++)
{
if(al.get(jg).isseclect(0))
{
al.get(jg).isseclect(1);
}
}
this.repaint();
flag=4;
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -