java 简单gis软件 panel paint

来源:互联网 发布:飘逸传世登录器源码 编辑:程序博客网 时间:2024/06/11 13:11




import java.awt.Color;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Image;import java.awt.Panel;import java.awt.Point;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ComponentEvent;import java.awt.event.ComponentListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.event.MouseWheelEvent;import java.awt.event.MouseWheelListener;import java.awt.image.BufferedImage;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.Vector;import javax.imageio.ImageIO;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTextField;import javax.swing.SwingUtilities;import javax.swing.filechooser.FileFilter;import javax.swing.filechooser.FileNameExtensionFilter;public class Map extends JFrame implements ActionListener{      JComboBox jb;      JMenuBar jmb;      JButton jm1,jm2,jm3;      JButton jbs;      MyPanel mp;      Panel mp1;      JFileChooser chooser,chooser1;      FileFilter filter,filter1;      BufferedImage bufferedImage=null;public static void main(String[] args) {// TODO 自动生成的方法存根          Map mainmap=new Map();}public Map(){try {bufferedImage = ImageIO.read(new File("/河北地图.jpg"));} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}   //jb = newomboBox();//jb.addItem("南京");//jb.addItem("苏州");//jb.addItem("南通");//jb.setSelectedItem("南京");chooser = new JFileChooser();        chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);//设置选择模式,既可以选择文件又可以选择文件夹        String extj[] = { "jpeg","jpg","bmp","png","gif","tiff"};        filter = new FileNameExtensionFilter( "Image",extj);        chooser.setFileFilter(filter);//设置文件后缀过滤器        chooser.setMultiSelectionEnabled(false);                chooser1 = new JFileChooser();        chooser1.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);//设置选择模式,既可以选择文件又可以选择文件夹        String extj1[] = { "txt" };        filter1 = new FileNameExtensionFilter( "TXT",extj1);        chooser1.setFileFilter(filter1);//设置文件后缀过滤器        chooser1.setMultiSelectionEnabled(false);jbs=new JButton("ssssssssssss");mp=new MyPanel(bufferedImage);jmb=new JMenuBar();jm1=new JButton("读取地图(R)");jm1.addActionListener(this);jm1.setActionCommand("readmap");jm1.setMnemonic('R');jm2=new JButton("获得坐标(G)");jm2.addActionListener(this);jm2.setActionCommand("readz");jm2.setMnemonic('G');jm3=new JButton("保存坐标(S)");jm3.addActionListener(this);jm3.setActionCommand("writez");jm3.setMnemonic('S');jmb.add(jm1);jmb.add(jm2);jmb.add(jm3);this.setJMenuBar(jmb);this.add(mp);//jbs.setSize(100,50);this.setTitle("河北地图");this.setSize(bufferedImage.getWidth(),bufferedImage.getHeight());this.setLocation(300,280);this.setResizable(true);this.setMaximumSize(new Dimension(800,600));this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}public void paintComponent(Graphics g){if(this.getWidth()>bufferedImage.getWidth())   this.setSize(bufferedImage.getWidth(), this.getHeight());}@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根int retval; FileWriter fw=null; BufferedWriter bw=null; FileReader fr=null; BufferedReader br=null;if(e.getActionCommand().equals("readmap")){retval = chooser.showOpenDialog(this);//显示"保存文件"对话框            if(retval == JFileChooser.APPROVE_OPTION) {//若成功打开                File file = chooser.getSelectedFile();//得到选择的文件名                //System.out.println("File to open " + file);                try {        bufferedImage = ImageIO.read(file);        } catch (IOException e1) {        // TODO 自动生成的 catch 块        e1.printStackTrace();        }                  this.remove(mp);                mp=new MyPanel(bufferedImage);                this.add(mp);                   mp.repaint();                }}else if(e.getActionCommand().equals("readz")){            retval = chooser1.showOpenDialog(this);//            if(retval == JFileChooser.APPROVE_OPTION) {            File file = chooser1.getSelectedFile();              //  System.out.println("File to save " + file);                try{fr=new FileReader(file);br=new BufferedReader(fr);String s="";Vector<Bq> ls=new Vector<Bq>();mp.jb.removeAllItems();while((s=br.readLine())!=null){String[] sz=s.split(" ");Bq b=new Bq();b.name=sz[0];b.x=Integer.parseInt(sz[1]);b.y=Integer.parseInt(sz[2]);mp.jb.addItem(b.name);ls.add(b);//Weizhi wz=new Weizhi(Integer.parseInt(sz[0]),Integer.parseInt(sz[1]),Integer.parseInt(sz[2]));//wzjh.add(wz);}Bq.setLabels(ls);mp.ls=Bq.getLabels();mp.repaint();}catch(Exception e2){}finally{try{br.close();fr.close();}catch (Exception e2){}}            }}else if(e.getActionCommand().equals("writez")){   File file = new File(this.getTitle()+".txt");            chooser1.setSelectedFile(file);//设置默认文件名            retval = chooser1.showSaveDialog(this);//显示“保存文件”对话框            if(retval == JFileChooser.APPROVE_OPTION) {                file = chooser1.getSelectedFile();               // System.out.println("File to save " + file);                }try{fw=new FileWriter(file);bw=new BufferedWriter(fw);Vector<Bq> ls=Bq.getLabels();//bw.write(sdtj+"\r\n");for(int i=0;i<ls.size();i++){Bq dt=ls.get(i);String zb=dt.name+" "+dt.x+" "+dt.y+"";bw.write(zb+"\r\n");}}catch(Exception e3){}finally{try{bw.close();fw.close();}catch(Exception e3){}}}}}class MyPanel extends JPanel implements MouseMotionListener,MouseListener,KeyListener,MouseWheelListener, ItemListener{int fl=0,fl1=0,fl2=0,fl3=0,fl4=0;//fl用来确定鼠标左键移动,fl1判断是不是处于编辑状态,fl2判断是右键拖拽,fl3确定在更改combox选项的时候不触发选择事件,fl4决定框选后是否重绘某些控件JLabel bilichi;JComboBox jb;JButton jbs,jbs1;JTextField jtf;Vector<Bq> ls;//默认选中南京}float size=1;Point point=new Point(0,0);Point oldpoint=new Point(0,0);Point newpoint=new Point(0,0);BufferedImage imag;Image image;public MyPanel(BufferedImage bufferedImage) {// TODO 自动生成的构造函数存根imag=bufferedImage;image=(Image)imag;this.setLayout(null);jb = new JComboBox();//Vector<Bq> ls=Bq.getLabels();jb.setSize(100, 20);ls=Bq.getLabels();if(ls.size()>0){jb.removeAllItems();for(int i=0;i<ls.size();i++){Bq b=ls.get(i);jb.addItem(b.name);}jb.setSelectedIndex(0);}jb.addItemListener(this);this.add(jb);bilichi=new JLabel("比例尺  1:1");//bilichi.setLocation(100, 100);//bilichi.setSize(200, 40);//this.add(bilichi);//jb.addItem("南京");//jb.addItem("苏州");//jb.addItem("南通");//jb.setSelectedItem("南京");jbs=new JButton("ssssssssss");jbs1=new JButton("ddddddd");//this.add(jb);this.setSize(imag.getWidth(),imag.getHeight());this.addMouseListener(this);this.addMouseWheelListener(this);this.addMouseMotionListener(this);this.addKeyListener(this);}@Overridepublic void mouseDragged(MouseEvent e) {// TODO 自动生成的方法存根if(fl==1&&fl1==0){newpoint.x=e.getX();newpoint.y=e.getY();point.x=point.x+(newpoint.x-oldpoint.x);point.y=point.y+(newpoint.y-oldpoint.y);oldpoint.x=newpoint.x;oldpoint.y=newpoint.y;        this.repaint();             }else if(fl2==1&&fl1==0){newpoint.x=e.getX();newpoint.y=e.getY();this.repaint();}}public void paintComponent(Graphics g){super.paintComponent(g);if(fl4==0){if(fl1==0){for(int i=0;i<this.getComponentCount();i++){    Object ob=this.getComponent(i);    if(!(ob instanceof JComboBox))    {    this.remove(i);    }}}}g.clearRect(0, 0, this.getWidth(), this.getHeight());/*if(point.x<-(imag.getWidth()-this.getWidth()))point.x=-(imag.getWidth()-this.getWidth());if(point.x>imag.getWidth()-this.getWidth())point.x=imag.getWidth()-this.getWidth();if(point.y<-(imag.getHeight()-this.getHeight()))point.y=-(imag.getHeight()-this.getHeight());if(point.y>0)point.y=0;*/g.drawImage(image, point.x, point.y,(int)(imag.getWidth()*size),(int)(imag.getHeight()*size),this);if(fl4==0){if(fl2==1)g.drawRect(oldpoint.x<newpoint.x?oldpoint.x:newpoint.x, oldpoint.y<newpoint.y?oldpoint.y:newpoint.y, newpoint.x>oldpoint.x?newpoint.x-oldpoint.x:oldpoint.x-newpoint.x, newpoint.y>oldpoint.y?newpoint.y-oldpoint.y:oldpoint.y-newpoint.y);jbs.setLocation(point);jbs1.setLocation((int)(point.x+(500*size)),(int)(point.y+(500*size)));//jb.setLocation((int)(0-this.getLocation().getX()),(int)(0-this.getLocation().getY()));//this.add(jb);jbs1.setSize((int)(100*size),(int)(30*size));jbs.setSize((int)(100*size),(int)(30*size));//this.add(jbs);//Vector<Bq> ls=Bq.getLabels();//for(int i=0;i<ls)//this.add(jbs1);ls=Bq.getLabels(); for(int i=0;i<ls.size();i++){Bq bq=ls.get(i);JLabel jl=new JLabel(bq.name);jl.setLocation((int)(point.x+(bq.x*size)),(int)(point.y+(bq.y*size)));jl.setSize((int)(70*size),(int)( 20*size));this.add(jl);}//bilichi=new JLabel("比例尺——1:1");bilichi.setLocation(0, 20);bilichi.setSize(200,40);this.add(bilichi);}if(fl4==1) this.requestFocus();//如果不重新获取焦点panel会不触发按键事件fl4=0;}@Overridepublic void mouseMoved(MouseEvent e) {// TODO 自动生成的方法存根}@Overridepublic void mouseClicked(MouseEvent e) {// TODO 自动生成的方法存根if(e.getButton()==MouseEvent.BUTTON3&&fl1==0){jtf=new JTextField();jtf.setLocation(e.getX(),e.getY());jtf.setSize(50, 30);jtf.addKeyListener(this);this.add(jtf);fl1=1;this.repaint();}}@Overridepublic void mousePressed(MouseEvent e) {// TODO 自动生成的方法存根for(int k=0;k<this.getComponentCount();k++){    Object ob=this.getComponent(k);    if(ob instanceof JLabel)    {    JLabel ii=(JLabel)ob;        ii.setOpaque(false);    ii.setBackground(Color.white);        //this.remove(i);    }}if(e.getButton()==MouseEvent.BUTTON1){this.oldpoint.x=e.getX();this.oldpoint.y=e.getY();fl=1;}else if(e.getButton()==MouseEvent.BUTTON3){this.oldpoint.x=e.getX();this.oldpoint.y=e.getY();this.newpoint.x=e.getX();this.newpoint.y=e.getY();fl2=1;fl3=1;}}@Overridepublic void mouseReleased(MouseEvent e) {// TODO 自动生成的方法存根fl=0;if(fl2==1){ ls=Bq.getLabels(); int sum=ls.size();for(int i=0;i<sum;i++){//ls=Bq.getLabels();//sum=ls.size();Bq b=ls.get(i);if(oldpoint.x<newpoint.x){if(oldpoint.y<newpoint.y){if(b.x*size>oldpoint.x-point.x&&b.x*size<newpoint.x-point.x&&b.y*size>oldpoint.y-point.y&&b.y*size<newpoint.y-point.y){/*for(int j=0;j<jb.getItemCount();j++){if(jb.getItemAt(j).toString().equals(b.name))jb.removeItemAt(j);}ls.remove(b);Bq.setLabels(ls);sum=ls.size();i=-1;*/for(int k=0;k<this.getComponentCount();k++){    Object ob=this.getComponent(k);    if(ob instanceof JLabel)    {    JLabel ii=(JLabel)ob;    if(ii.getText().equals(b.name))    {    ii.setOpaque(true);    ii.setBackground(Color.blue);    }    //this.remove(i);    }}fl4=1;}}else {if(b.x*size>oldpoint.x-point.x&&b.x*size<newpoint.x-point.x&&b.y*size<oldpoint.y-point.y&&b.y*size>newpoint.y-point.y){/*for(int j=0;j<jb.getItemCount();j++){if(jb.getItemAt(j).toString().equals(b.name))jb.removeItemAt(j);}ls.remove(b);Bq.setLabels(ls);sum=ls.size();i=-1;*/for(int k=0;k<this.getComponentCount();k++){    Object ob=this.getComponent(k);    if(ob instanceof JLabel)    {    JLabel ii=(JLabel)ob;    if(ii.getText().equals(b.name))    {    ii.setOpaque(true);    ii.setBackground(Color.blue);    }    //this.remove(i);    }}fl4=1;}}}else{if(oldpoint.y<newpoint.y){if(b.x*size<oldpoint.x-point.x&&b.x*size>newpoint.x-point.x&&b.y*size>oldpoint.y-point.y&&b.y*size<newpoint.y-point.y){/*for(int j=0;j<jb.getItemCount();j++){if(jb.getItemAt(j).toString().equals(b.name))jb.removeItemAt(j);}ls.remove(b);Bq.setLabels(ls);sum=ls.size();i=-1;*/for(int k=0;k<this.getComponentCount();k++){    Object ob=this.getComponent(k);    if(ob instanceof JLabel)    {    JLabel ii=(JLabel)ob;    if(ii.getText().equals(b.name))    {    ii.setOpaque(true);    ii.setBackground(Color.blue);    }    //this.remove(i);    }}fl4=1;}}else {if(b.x*size<oldpoint.x-point.x&&b.x*size>newpoint.x-point.x&&b.y*size<oldpoint.y-point.y&&b.y*size>newpoint.y-point.y){/*for(int j=0;j<jb.getItemCount();j++){if(jb.getItemAt(j).toString().equals(b.name))jb.removeItemAt(j);}ls.remove(b);Bq.setLabels(ls);sum=ls.size();i=-1;*/for(int k=0;k<this.getComponentCount();k++){    Object ob=this.getComponent(k);    if(ob instanceof JLabel)    {    JLabel ii=(JLabel)ob;    if(ii.getText().equals(b.name))    {    ii.setOpaque(true);    ii.setBackground(Color.blue);    }    //this.remove(i);    }}fl4=1;}}}}}fl1=0;fl2=0;fl3=0;this.repaint();}@Overridepublic void mouseEntered(MouseEvent e) {// TODO 自动生成的方法存根}@Overridepublic void mouseExited(MouseEvent e) {// TODO 自动生成的方法存根}@Overridepublic void mouseWheelMoved(MouseWheelEvent e) {// TODO 自动生成的方法存根if(e.getWheelRotation()==-1){if(size<=4)size+=0.01;bilichi.setText("比例尺  1:"+1/size);}if(e.getWheelRotation()==1){if(size>0)size-=0.01;bilichi.setText("比例尺  1:"+1/size);}this.repaint(); }@Overridepublic void keyTyped(KeyEvent e) {// TODO 自动生成的方法存根}@Overridepublic void keyPressed(KeyEvent e) {// TODO 自动生成的方法存根if(e.getKeyCode()==KeyEvent.VK_ENTER){int ishave=0;ls=Bq.getLabels();    for(int i=0;i<ls.size();i++)    {Bq jl=new Bq();jl=ls.get(i);if(jtf.getText().replace(" ","").equals(jl.name))ishave=1;    }    if(ishave==0)    {    Bq jl=new Bq();jl.name=jtf.getText().replace(" ",""); jl.x=(int)((jtf.getLocation().x-point.x)/size); jl.y=(int)((jtf.getLocation().y-point.y)/size); jb.addItem(jl.name);  ls.add(jl); Bq.setLabels(ls);     }    jtf.removeKeyListener(this); this.remove(jtf);  //this.add(jl); fl1=0;  this.repaint();}else if(e.getKeyCode()==KeyEvent.VK_ESCAPE){ jtf.removeKeyListener(this);this.remove(jtf);fl1=0;this.repaint();}else if(e.getKeyCode()==KeyEvent.VK_DELETE){int sum=this.getComponentCount();for(int k=0;k<sum;k++){    Object ob=this.getComponent(k);    if(ob instanceof JLabel)    {    JLabel ii=(JLabel)ob;    if(ii.getBackground()==Color.blue&&ii.isOpaque())    {    for(int j=0;j<jb.getItemCount();j++){if(jb.getItemAt(j).toString().equals(ii.getText()))jb.removeItemAt(j);}        ls=Bq.getLabels();    for(int i=0;i<ls.size();i++)    {    Bq b=ls.get(i);    if(b.name.equals(ii.getText()))    {ls.remove(i);    Bq.setLabels(ls);    }    }    //k--;    //sum=this.getComponentCount();    }    //this.remove(i);    }}fl4=0;fl1=0;this.repaint();}}@Overridepublic void keyReleased(KeyEvent e) {// TODO 自动生成的方法存根}@Overridepublic void itemStateChanged(ItemEvent e) {// TODO 自动生成的方法存根if(fl3==0){if (e.getStateChange()==ItemEvent.SELECTED){       String ss=jb.getSelectedItem().toString();       Vector<Bq> ls=Bq.getLabels();       for(int i=0;i<ls.size();i++)       {       Bq b=ls.get(i);       if(b.name.equals(ss))       {       point.x=(int)((this.getWidth()/2)-(b.x*size));       point.y=(int)((this.getHeight()/2)-(b.y*size));       this.repaint();       }       }       }}}}class Bq{int x,y;String name;static Vector<Bq> labels=new Vector<Bq>();public static Vector<Bq> getLabels() {return Bq.labels;}public static void setLabels(Vector<Bq> labels) {Bq.labels = labels;}}


0 0