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
- java 简单gis软件 panel paint
- Panel Paint事件
- java awt简单示例 frame and panel
- GIS软件
- ext panel 简单布局
- GIS软件介绍
- 某GIS软件用后感
- 透视Web GIS软件
- GIS地理信息软件
- 推荐几款开源GIS软件
- GIS软件比较
- 开源GIS软件SharpMap
- 开源GIS软件
- 推荐几款开源GIS软件
- 开源GIS软件 转
- 开源GIS软件初探
- 开源GIS软件初探
- GIS软件列表
- ubuntu+svn服务搭建
- 负载均衡的几种实现技术
- Eclipse 下SVN上传项目遇到的问题及解决办法全集
- mysql数据库性能优化与测试
- muduo网络库脉络分析(2)
- java 简单gis软件 panel paint
- 位操作——循环右移n位
- 初创团队如何保障软件应用产品的性能质量
- Java中常量池的概念
- 我是一颗小太阳,浑身充满正能量
- 面试常规问题
- USB取证原理
- leetcode--258. Add Digits
- Spring字符集过滤器CharacterEncodingFilter