热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

java编程实现屏幕截图(截屏)代码总结

这篇文章主要介绍了java编程实现屏幕截图(截屏)代码,结合3个实例总结分析了Java截屏时页面抓取及图片保存的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例总结了常见的java编程实现屏幕截图方法。分享给大家供大家参考,具体如下:

方法一:

import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class CaptureScreen {
 public static void captureScreen(String fileName, String folder) throws Exception {
  Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  Rectangle screenRectangle = new Rectangle(screenSize);
  Robot robot = new Robot();
  BufferedImage image = robot.createScreenCapture(screenRectangle);
  //保存路径
  File screenFile = new File(fileName);
  if (!screenFile.exists()) {
   screenFile.mkdir();
  }
  File f = new File(screenFile, folder);
  ImageIO.write(image, "png", f);
  //自动打开
  if (Desktop.isDesktopSupported()
     && Desktop.getDesktop().isSupported(Desktop.Action.OPEN))
     Desktop.getDesktop().open(f);
 }
 public static void main(String[] args) {
  try {
   captureScreen("e:\\你好","11.png");
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
}

方法二:

package com.qiu.util;
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.*;
/**
 * 一个简单的屏幕抓图
 * 
 **/
public class ScreenCapture {
  // test main
  public static void main(String[] args) throws Exception {
    String userdir = System.getProperty("user.dir");
    File tempFile = new File("d:", "temp.png");
    ScreenCapture capture = ScreenCapture.getInstance();
    capture.captureImage();
    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    panel.setLayout(new BorderLayout());
    JLabel imagebox = new JLabel();
    panel.add(BorderLayout.CENTER, imagebox);
    imagebox.setIcon(capture.getPickedIcon());
    capture.saveToFile(tempFile);
    capture.captureImage();
    imagebox.setIcon(capture.getPickedIcon());
    frame.setContentPane(panel);
    frame.setSize(400, 300);
    frame.show();
    System.out.println("Over");
  }
  private ScreenCapture() {
    try {
      robot = new Robot();
    } catch (AWTException e) {
      System.err.println("Internal Error: " + e);
      e.printStackTrace();
    }
    JPanel cp = (JPanel) dialog.getContentPane();
    cp.setLayout(new BorderLayout());
    labFullScreenImage.addMouseListener(new MouseAdapter() {
      public void mouseReleased(MouseEvent evn) {
        isFirstPoint = true;
        pickedImage = fullScreenImage.getSubimage(recX, recY, recW,
            recH);
        dialog.setVisible(false);
      }
    });
    labFullScreenImage.addMouseMotionListener(new MouseMotionAdapter() {
      public void mouseDragged(MouseEvent evn) {
        if (isFirstPoint) {
          x1 = evn.getX();
          y1 = evn.getY();
          isFirstPoint = false;
        } else {
          x2 = evn.getX();
          y2 = evn.getY();
          int maxX = Math.max(x1, x2);
          int maxY = Math.max(y1, y2);
          int minX = Math.min(x1, x2);
          int minY = Math.min(y1, y2);
          recX = minX;
          recY = minY;
          recW = maxX - minX;
          recH = maxY - minY;
          labFullScreenImage.drawRectangle(recX, recY, recW, recH);
        }
      }
      public void mouseMoved(MouseEvent e) {
        labFullScreenImage.drawCross(e.getX(), e.getY());
      }
    });
    cp.add(BorderLayout.CENTER, labFullScreenImage);
    dialog.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
    dialog.setAlwaysOnTop(true);
    dialog.setMaximumSize(Toolkit.getDefaultToolkit().getScreenSize());
    dialog.setUndecorated(true);
    dialog.setSize(dialog.getMaximumSize());
    dialog.setModal(true);
  }
  // Singleton Pattern
  public static ScreenCapture getInstance() {
    return defaultCapturer;
  }
  /** 捕捉全屏慕 */
  public Icon captureFullScreen() {
    fullScreenImage = robot.createScreenCapture(new Rectangle(Toolkit
        .getDefaultToolkit().getScreenSize()));
    ImageIcon icon = new ImageIcon(fullScreenImage);
    return icon;
  }
  /** 捕捉屏幕的一个矫形区域 */
  public void captureImage() {
    fullScreenImage = robot.createScreenCapture(new Rectangle(Toolkit
        .getDefaultToolkit().getScreenSize()));
    ImageIcon icon = new ImageIcon(fullScreenImage);
    labFullScreenImage.setIcon(icon);
    dialog.setVisible(true);
  }
  /** 得到捕捉后的BufferedImage */
  public BufferedImage getPickedImage() {
    return pickedImage;
  }
  /** 得到捕捉后的Icon */
  public ImageIcon getPickedIcon() {
    return new ImageIcon(getPickedImage());
  }
  /**
   * 储存为一个文件,为PNG格式
   * 
   * @deprecated replaced by saveAsPNG(File file)
   **/
  @Deprecated
  public void saveToFile(File file) throws IOException {
    ImageIO.write(getPickedImage(), defaultImageFormater, file);
  }
  /** 储存为一个文件,为PNG格式 */
  public void saveAsPNG(File file) throws IOException {
    ImageIO.write(getPickedImage(), "png", file);
  }
  /** 储存为一个JPEG格式图像文件 */
  public void saveAsJPEG(File file) throws IOException {
    ImageIO.write(getPickedImage(), "JPEG", file);
  }
  /** 写入一个OutputStream */
  public void write(OutputStream out) throws IOException {
    ImageIO.write(getPickedImage(), defaultImageFormater, out);
  }
  // singleton design pattern
  private static ScreenCapture defaultCapturer = new ScreenCapture();
  private int x1, y1, x2, y2;
  private int recX, recY, recH, recW; // 截取的图像
  private boolean isFirstPoint = true;
  private BackgroundImage labFullScreenImage = new BackgroundImage();
  private Robot robot;
  private BufferedImage fullScreenImage;
  private BufferedImage pickedImage;
  private String defaultImageFormater = "png";
  private JDialog dialog = new JDialog();
}
/** 显示图片的Label */
class BackgroundImage extends JLabel {
  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawRect(x, y, w, h);
    String area = Integer.toString(w) + " * " + Integer.toString(h);
    g.drawString(area, x + (int) w / 2 - 15, y + (int) h / 2);
    g.drawLine(lineX, 0, lineX, getHeight());
    g.drawLine(0, lineY, getWidth(), lineY);
  }
  public void drawRectangle(int x, int y, int width, int height) {
    this.x = x;
    this.y = y;
    h = height;
    w = width;
    repaint();
  }
  public void drawCross(int x, int y) {
    lineX = x;
    lineY = y;
    repaint();
  }
  int lineX, lineY;
  int x, y, h, w;
}

方法三:

因为有最小化到系统托盘,还是需要一张名为bg.gif作为托盘图标,图片应放在同级目录下,否则会空指针异常。

主要的截屏代码部分是:

Robot ro=new Robot();
Toolkit tk=Toolkit.getDefaultToolkit();
Dimension di=tk.getScreenSize();
Rectangle rec=new Rectangle(0,0,di.width,di.height);
BufferedImage bi=ro.createScreenCapture(rec);

(源代码来源于CSDN)

import java.awt.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.imageio.*;
import java.awt.image.*;
public class CaptureScreen extends JFrame implements ActionListener{
 private JButton start,cancel,saveAll;
 private JPanel c;
 private BufferedImage get;
 private JTabbedPane jtp;//一个放置很多份图片
 private int index;//一个一直会递增的索引,用于标认图片
 private JRadioButton java,system;//JAVA界面,系统界面
 /** Creates a new instance of CaptureScreen */
 public CaptureScreen() {
  super("屏幕截取软件(第三版)");
  try{
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  }catch(Exception exe){
   exe.printStackTrace();
  }
  initWindow();
  initOther();
  initTrayIcon();
 }
 private void initOther(){
  jtp=new JTabbedPane(JTabbedPane.TOP,JTabbedPane.SCROLL_TAB_LAYOUT);
 }
 private void initWindow(){
  start=new JButton("开始截取");
  saveAll=new JButton("保存所有");
  cancel=new JButton("退出");
  start.addActionListener(this);
  saveAll.addActionListener(this);
  cancel.addActionListener(this);
  JPanel buttOnJP=new JPanel();
  c=new JPanel(new BorderLayout());
  c.setBackground(Color.BLACK);
  JLabel jl=new JLabel("屏幕截取",JLabel.CENTER);
  jl.setFont(new Font("黑体",Font.BOLD,40));
  jl.setForeground(Color.RED);
  c.add(jl,BorderLayout.CENTER);
  buttonJP.add(start);
  buttonJP.add(saveAll);
  buttonJP.add(cancel);
  buttonJP.setBorder(BorderFactory.createTitledBorder("公共操作区"));
  JPanel jp=new JPanel();//放两个单选按钮的面板
  jp.add(java=new JRadioButton("java界面"));
  jp.add(system=new JRadioButton("系统界面",true));
  java.addActionListener(this);
  system.addActionListener(this);
  jp.setBorder(BorderFactory.createTitledBorder("界面风格"));
  ButtonGroup bg=new ButtonGroup();
  bg.add(java);
  bg.add(system);
  JPanel all=new JPanel();
  all.add(jp);
  all.add(buttonJP);
  this.getContentPane().add(c,BorderLayout.CENTER);
  this.getContentPane().add(all,BorderLayout.SOUTH);
  this.setSize(500,400);
  this.setLocationRelativeTo(null);
  this.setVisible(true);
  this.setAlwaysOnTop(true);
  this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
  this.addWindowListener(new WindowAdapter(){
   public void windowClosing(WindowEvent we){
    CaptureScreen.this.setVisible(false);
   }
  });
 }
 private void initTrayIcon(){
  try{
   SystemTray st=SystemTray.getSystemTray();
   Image im=ImageIO.read(this.getClass().getResource("bg.gif"));
   PopupMenu pm=new PopupMenu("弹出菜单");
   pm.add(new MenuItem("关于")).addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent ae){
     JOptionPane.showMessageDialog(CaptureScreen.this,"

关于

" + "这是一款纯JAVA的屏幕截取程序
在以前的基础上增加了一些常用的功能,
" + "比如,批量保存,多幅截取,复制到系统粘帖板...
" + "在使用过程中有任何问题,欢迎联系.
" + "作者:千里冰封
" + "QQ:24325142
"); } }); pm.addSeparator(); pm.add(new MenuItem("显示主窗口")).addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ CaptureScreen.this.setVisible(true); } }); pm.add(new MenuItem("开始截取")).addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ doStart(); } }); pm.add(new MenuItem("退出程序")).addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ System.exit(0); } }); TrayIcon ti=new TrayIcon(im,"JAVA屏幕截取",pm); st.add(ti); ti.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ CaptureScreen.this.setVisible(true); } }); }catch(Exception exe){ exe.printStackTrace(); } } private void updates(){ this.setVisible(true); if(get!=null){ //如果索引是0,则表示一张图片都没有被加入过, //则要清除当前的东西,重新把tabpane放进来 if(index==0){ c.removeAll(); c.add(jtp,BorderLayout.CENTER); }else{//否则的话,直接对tabpane添加面板就可以了 //就什么都不用做了 } PicPanel pic=new PicPanel(get); jtp.addTab("图片"+(++index),pic); jtp.setSelectedComponent(pic); SwingUtilities.updateComponentTreeUI(c); } } private void doStart(){ try{ this.setVisible(false); Thread.sleep(500);//睡500毫秒是为了让主窗完全不见 Robot ro=new Robot(); Toolkit tk=Toolkit.getDefaultToolkit(); Dimension di=tk.getScreenSize(); Rectangle rec=new Rectangle(0,0,di.width,di.height); BufferedImage bi=ro.createScreenCapture(rec); JFrame jf=new JFrame(); Temp temp=new Temp(jf,bi,di.width,di.height); jf.getContentPane().add(temp,BorderLayout.CENTER); jf.setUndecorated(true); jf.setSize(di); jf.setVisible(true); jf.setAlwaysOnTop(true); } catch(Exception exe){ exe.printStackTrace(); } } /** *公共方法,处理保存所有的图片 */ public void doSaveAll(){ if(jtp.getTabCount()==0){ JOptionPane.showMessageDialog(this,"图片不能为空!!","错误",JOptionPane.ERROR_MESSAGE); return; } JFileChooser jfc=new JFileChooser("."); jfc.addChoosableFileFilter(new GIFfilter()); jfc.addChoosableFileFilter(new BMPfilter()); jfc.addChoosableFileFilter(new JPGfilter()); jfc.addChoosableFileFilter(new PNGfilter()); int i=jfc.showSaveDialog(this); if(i==JFileChooser.APPROVE_OPTION){ File file=jfc.getSelectedFile(); String about="PNG"; String ext=file.toString().toLowerCase(); javax.swing.filechooser.FileFilter ff=jfc.getFileFilter(); if(ff instanceof JPGfilter){ about="JPG"; } else if(ff instanceof PNGfilter){ about="PNG"; }else if(ff instanceof BMPfilter){ about="BMP"; }else if(ff instanceof GIFfilter){ about="GIF"; } if(ext.endsWith(about.toLowerCase())){ ext=ext.substring(0,ext.lastIndexOf(about.toLowerCase())); } //起一个线程去保存这些图片并显示出进度条 new SaveAllThread(ext,about).setVisible(true); } } //专门用来保存所有图片的线程类,它还要显示出保存的进度条 private class SaveAllThread extends JDialog implements Runnable{ private String name;//文件名头部份 private String ext;//文件格式 private JProgressBar jpb;//一个进度条 private JLabel info;// 一个信息显示条 private int allTask,doneTask;//所有任务,已完成任务 public SaveAllThread(String name,String ext){ super(CaptureScreen.this,"保存",true); this.name=name; this.ext=ext; initWindow(); } private void initWindow(){ jpb=new JProgressBar(); allTask=jtp.getTabCount(); jpb.setMaximum(allTask); jpb.setMinimum(0); jpb.setValue(0); jpb.setStringPainted(true); setProgressBarString(); info=new JLabel("正在保存到:"); this.getContentPane().setBackground(Color.CYAN); this.add(info,BorderLayout.NORTH); this.add(jpb,BorderLayout.SOUTH); this.setUndecorated(true); this.setSize(300,100); this.setLocationRelativeTo(CaptureScreen.this); new Thread(this).start(); } private void setProgressBarString(){ jpb.setString(""+doneTask+"/"+allTask); } public void run(){ try{ for(int i=0;i正在保存到:
"+f.toString()+""); ImageIO.write(image,ext,f); doneTask++; jpb.setValue(doneTask); setProgressBarString(); Thread.sleep(500); } JOptionPane.showMessageDialog(this,"保存完毕!!"); this.dispose(); }catch(Exception exe){ exe.printStackTrace(); this.dispose(); } } } /** *公用的处理保存图片的方法 *这个方法不再私有了 */ public void doSave(BufferedImage get){ try{ if(get==null){ JOptionPane.showMessageDialog(this,"图片不能为空!!","错误",JOptionPane.ERROR_MESSAGE); return; } JFileChooser jfc=new JFileChooser("."); jfc.addChoosableFileFilter(new GIFfilter()); jfc.addChoosableFileFilter(new BMPfilter()); jfc.addChoosableFileFilter(new JPGfilter()); jfc.addChoosableFileFilter(new PNGfilter()); int i=jfc.showSaveDialog(this); if(i==JFileChooser.APPROVE_OPTION){ File file=jfc.getSelectedFile(); String about="PNG"; String ext=file.toString().toLowerCase(); javax.swing.filechooser.FileFilter ff=jfc.getFileFilter(); if(ff instanceof JPGfilter){ about="JPG"; if(!ext.endsWith(".jpg")){ String ns=ext+".jpg"; file=new File(ns); } } else if(ff instanceof PNGfilter){ about="PNG"; if(!ext.endsWith(".png")){ String ns=ext+".png"; file=new File(ns); } }else if(ff instanceof BMPfilter){ about="BMP"; if(!ext.endsWith(".bmp")){ String ns=ext+".bmp"; file=new File(ns); } }else if(ff instanceof GIFfilter){ about="GIF"; if(!ext.endsWith(".gif")){ String ns=ext+".gif"; file=new File(ns); } } if(ImageIO.write(get,about,file)){ JOptionPane.showMessageDialog(this,"保存成功!"); } else JOptionPane.showMessageDialog(this,"保存失败!"); } } catch(Exception exe){ exe.printStackTrace(); } } /** *公共的处理把当前的图片加入剪帖板的方法 */ public void doCopy(final BufferedImage image){ try{ if(get==null){ JOptionPane.showMessageDialog(this,"图片不能为空!!","错误",JOptionPane.ERROR_MESSAGE); return; } Transferable trans = new Transferable(){ public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] { DataFlavor.imageFlavor }; } public boolean isDataFlavorSupported(DataFlavor flavor) { return DataFlavor.imageFlavor.equals(flavor); } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if(isDataFlavorSupported(flavor)) return image; throw new UnsupportedFlavorException(flavor); } }; Toolkit.getDefaultToolkit().getSystemClipboard().setContents(trans, null); JOptionPane.showMessageDialog(this,"已复制到系统粘帖板!!"); }catch(Exception exe){ exe.printStackTrace(); JOptionPane.showMessageDialog(this,"复制到系统粘帖板出错!!","错误",JOptionPane.ERROR_MESSAGE); } } //处理关闭事件 private void doClose(Component c){ jtp.remove(c); c=null; System.gc(); } public void actionPerformed(ActionEvent ae){ Object source=ae.getSource(); if(source==start){ doStart(); } else if(source==cancel){ System.exit(0); }else if(source==java){ try{ UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); SwingUtilities.updateComponentTreeUI(this); }catch(Exception exe){ exe.printStackTrace(); } }else if(source==system){ try{ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); SwingUtilities.updateComponentTreeUI(this); }catch(Exception exe){ exe.printStackTrace(); } }else if(source==saveAll){ doSaveAll(); } } //一个内部类,它表示一个面板,一个可以被放进tabpane的面板 //也有自己的一套处理保存和复制的方法 private class PicPanel extends JPanel implements ActionListener{ JButton save,copy,close;//表示保存,复制,关闭的按钮 BufferedImage get;//得到的图片 public PicPanel(BufferedImage get){ super(new BorderLayout()); this.get=get; initPanel(); } public BufferedImage getImage(){ return get; } private void initPanel(){ save=new JButton("保存(S)"); copy=new JButton("复制到剪帖板(C)"); close=new JButton("关闭(X)"); save.setMnemonic('S'); copy.setMnemonic('C'); close.setMnemonic('X'); JPanel buttOnPanel=new JPanel(); buttonPanel.add(copy); buttonPanel.add(save); buttonPanel.add(close); JLabel icon=new JLabel(new ImageIcon(get)); this.add(new JScrollPane(icon),BorderLayout.CENTER); this.add(buttonPanel,BorderLayout.SOUTH); save.addActionListener(this); copy.addActionListener(this); close.addActionListener(this); } public void actionPerformed(ActionEvent e) { Object source=e.getSource(); if(source==save){ doSave(get); }else if(source==copy){ doCopy(get); }else if(source==close){ get=null; doClose(this); } } } //保存BMP格式的过滤器 private class BMPfilter extends javax.swing.filechooser.FileFilter{ public BMPfilter(){ } public boolean accept(File file){ if(file.toString().toLowerCase().endsWith(".bmp")|| file.isDirectory()){ return true; } else return false; } public String getDescription(){ return "*.BMP(BMP图像)"; } } //保存JPG格式的过滤器 private class JPGfilter extends javax.swing.filechooser.FileFilter{ public JPGfilter(){ } public boolean accept(File file){ if(file.toString().toLowerCase().endsWith(".jpg")|| file.isDirectory()){ return true; } else return false; } public String getDescription(){ return "*.JPG(JPG图像)"; } } //保存GIF格式的过滤器 private class GIFfilter extends javax.swing.filechooser.FileFilter{ public GIFfilter(){ } public boolean accept(File file){ if(file.toString().toLowerCase().endsWith(".gif")|| file.isDirectory()){ return true; } else return false; } public String getDescription(){ return "*.GIF(GIF图像)"; } } //保存PNG格式的过滤器 private class PNGfilter extends javax.swing.filechooser.FileFilter{ public boolean accept(File file){ if(file.toString().toLowerCase().endsWith(".png")|| file.isDirectory()){ return true; } else return false; } public String getDescription(){ return "*.PNG(PNG图像)"; } } //一个暂时类,用于显示当前的屏幕图像 private class Temp extends JPanel implements MouseListener,MouseMotionListener{ private BufferedImage bi; private int width,height; private int startX,startY,endX,endY,tempX,tempY; private JFrame jf; private Rectangle select=new Rectangle(0,0,0,0);//表示选中的区域 private Cursor cs=new Cursor(Cursor.CROSSHAIR_CURSOR);//表示一般情况下的鼠标状态 private States current=States.DEFAULT;// 表示当前的编辑状态 private Rectangle[] rec;//表示八个编辑点的区域 //下面四个常量,分别表示谁是被选中的那条线上的端点 public static final int START_X=1; public static final int START_Y=2; public static final int END_X=3; public static final int END_Y=4; private int currentX,currentY;//当前被选中的X和Y,只有这两个需要改变 private Point p=new Point();//当前鼠标移的地点 private boolean showTip=true;//是否显示提示.如果鼠标左键一按,则提示不再显了 public Temp(JFrame jf,BufferedImage bi,int width,int height){ this.jf=jf; this.bi=bi; this.width=width; this.height=height; this.addMouseListener(this); this.addMouseMotionListener(this); initRecs(); } private void initRecs(){ rec=new Rectangle[8]; for(int i=0;iendX?startX:endX)-5,y-5,10,10); rec[3]=new Rectangle((startX>endX?startX:endX)-5,y1-5,10,10); rec[4]=new Rectangle((startX>endX?startX:endX)-5,(startY>endY?startY:endY)-5,10,10); rec[5]=new Rectangle(x1-5,(startY>endY?startY:endY)-5,10,10); rec[6]=new Rectangle(x-5,(startY>endY?startY:endY)-5,10,10); rec[7]=new Rectangle(x-5,y1-5,10,10); if(showTip){ g.setColor(Color.CYAN); g.fillRect(p.x,p.y,170,20); g.setColor(Color.RED); g.drawRect(p.x,p.y,170,20); g.setColor(Color.BLACK); g.drawString("请按住鼠标左键不放选择截图区",p.x,p.y+15); } } //根据东南西北等八个方向决定选中的要修改的X和Y的座标 private void initSelect(States state){ switch(state){ case DEFAULT: currentX=0; currentY=0; break; case EAST: currentX=(endX>startX?END_X:START_X); currentY=0; break; case WEST: currentX=(endX>startX?START_X:END_X); currentY=0; break; case NORTH: currentX=0; currentY=(startY>endY?END_Y:START_Y); break; case SOUTH: currentX=0; currentY=(startY>endY?START_Y:END_Y); break; case NORTH_EAST: currentY=(startY>endY?END_Y:START_Y); currentX=(endX>startX?END_X:START_X); break; case NORTH_WEST: currentY=(startY>endY?END_Y:START_Y); currentX=(endX>startX?START_X:END_X); break; case SOUTH_EAST: currentY=(startY>endY?START_Y:END_Y); currentX=(endX>startX?END_X:START_X); break; case SOUTH_WEST: currentY=(startY>endY?START_Y:END_Y); currentX=(endX>startX?START_X:END_X); break; default: currentX=0; currentY=0; break; } } public void mouseMoved(MouseEvent me){ doMouseMoved(me); initSelect(current); if(showTip){ p=me.getPoint(); repaint(); } } //特意定义一个方法处理鼠标移动,是为了每次都能初始化一下所要选择的地区 private void doMouseMoved(MouseEvent me){ if(select.contains(me.getPoint())){ this.setCursor(new Cursor(Cursor.MOVE_CURSOR)); current=States.MOVE; } else{ States[] st=States.values(); for(int i=0;i=this.getWidth()){ wid=this.getWidth()-select.x; } if(select.y+select.height>=this.getHeight()){ het=this.getHeight()-select.y; } get=bi.getSubimage(select.x,select.y,wid,het); jf.dispose(); updates(); } } } } } public static void main(String args[]){ SwingUtilities.invokeLater(new Runnable(){ public void run(){ new CaptureScreen(); } }); } } //一些表示状态的枚举 enum States{ NORTH_WEST(new Cursor(Cursor.NW_RESIZE_CURSOR)),//表示西北角 NORTH(new Cursor(Cursor.N_RESIZE_CURSOR)), NORTH_EAST(new Cursor(Cursor.NE_RESIZE_CURSOR)), EAST(new Cursor(Cursor.E_RESIZE_CURSOR)), SOUTH_EAST(new Cursor(Cursor.SE_RESIZE_CURSOR)), SOUTH(new Cursor(Cursor.S_RESIZE_CURSOR)), SOUTH_WEST(new Cursor(Cursor.SW_RESIZE_CURSOR)), WEST(new Cursor(Cursor.W_RESIZE_CURSOR)), MOVE(new Cursor(Cursor.MOVE_CURSOR)), DEFAULT(new Cursor(Cursor.DEFAULT_CURSOR)); private Cursor cs; States(Cursor cs){ this.cs=cs; } public Cursor getCursor(){ return cs; } }

希望本文所述对大家Java程序设计有所帮助。


推荐阅读
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 原理:dismiss再弹出,把dialog设为全局对象。if(dialog!null&&dialog.isShowing()&&!(Activity.)isFinishing()) ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • linux 禁止指定ip访问
    linux中如何禁止指定的ip访问呢?比如被别人暴力破解,被别人使用不同的密码尝试登录:所以我想直接禁用这些ip的访问.怎么办呢?解决方案:修改配置文件etchosts.deny把 ... [详细]
  • hadoop1.2.1文档中这样写:Nowcheckthatyoucansshtothelocalhostwithoutapassphrase:$sshlocalhostIfyou ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
  •   CSS网页布局中不推荐使用的HTML标签,请尽量不要使用这些HTML标签。  Donotusethesehtmlelementsinhtmlpages.  Presentationalelementsshouldnotbeused ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • A题这题贼水,直接暴力就可以了。用个bool数组记录一下,如果某一天,当前剩下的最大的出现了的话,就输出一段。1#include<stdio.h>2intn;3boolvi ... [详细]
  • #-*-coding:utf-8-*-print(upython与开源QGis课题研究组)#print(汉字)##创建矢量数据文件#try:fromosgeoimporto ... [详细]
  • 主函数:CStringGetCPUIDString()Copyright(C)shangweixiao2011 ... [详细]
  • 1引言在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着JavaSE1.6对Synchronized进行 ... [详细]
author-avatar
黄小翻_618
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有