千里冰封
          JAVA 濃香四溢
          posts - 151,comments - 2801,trackbacks - 0
          <2008年3月>
          2425262728291
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          盡管千里冰封
          依然擁有晴空

           

          留言簿(204)

          隨筆分類(197)

          隨筆檔案(189)

          文章檔案(2)

          友情鏈接

          搜索

          •  

          積分與排名

          • 積分 - 964657
          • 排名 - 35

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

          呵呵,昨天也看到朋友的留言,又增加了一些功能,

          1,增加了一個把截到的圖片復制到系統的剪帖板,這樣一來就可以直接粘帖到word,photoshop,畫圖等程序里面了

          2,增加了每截一張圖片都會新開一個tab來放它,并且tab里面各自有各自的操作方法.

          點擊下載源文件和可執行JAR文件

          /*
           * CaptureScreen.java
           *
           * Created on 2007年8月30日, 下午12:46
           *
           * To change this template, choose Tools | Template Manager
           * and open the template in the editor.
           
          */

          package hadeslee.swing;

          /**
           *
           * 
          @author lbf
           
          */
          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;
              
          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();
              }
              
          private void initOther(){
                  jtp
          =new JTabbedPane(JTabbedPane.TOP,JTabbedPane.SCROLL_TAB_LAYOUT);
              }
              
          private void initWindow(){
                  start
          =new JButton("開始截取");
                  cancel
          =new JButton("退出");
                  start.addActionListener(
          this);
                  cancel.addActionListener(
          this);
                  JPanel buttonJP
          =new JPanel();
                  c
          =new JPanel(new BorderLayout());
                  JLabel jl
          =new JLabel("屏幕截取",JLabel.CENTER);
                  JLabel jl1
          =new JLabel("作者:千里冰封",JLabel.CENTER);
                  jl.setFont(
          new Font("黑體",Font.BOLD,40));
                  jl1.setFont(
          new Font("宋體",Font.BOLD,20));
                  jl.setForeground(Color.RED);
                  jl1.setForeground(Color.BLUE);
                  c.add(jl,BorderLayout.CENTER);
                  c.add(jl1,BorderLayout.SOUTH);
                  buttonJP.add(start);
                  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.EXIT_ON_CLOSE);
              }
              
          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 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){
                              
          if(!ext.endsWith(".jpg")){
                                  String ns
          =ext+".jpg";
                                  file
          =new File(ns);
                                  about
          ="JPG";
                              }
                          } 
          else if(ff instanceof PNGfilter){
                              
          if(!ext.endsWith(".png")){
                                  String ns
          =ext+".png";
                                  file
          =new File(ns);
                                  about
          ="PNG";
                              }
                          }
          else if(ff instanceof BMPfilter){
                              
          if(!ext.endsWith(".bmp")){
                                  String ns
          =ext+".bmp";
                                  file
          =new File(ns);
                                  about
          ="BMP";
                              }
                          }
          else if(ff instanceof GIFfilter){
                              
          if(!ext.endsWith(".gif")){
                                  String ns
          =ext+".gif";
                                  file
          =new File(ns);
                                  about
          ="GIF";
                              }
                          }
                          
          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();
                      }
                  }
              }
              
          //一個內部類,它表示一個面板,一個可以被放進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();
                  }
                  
          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;i<rec.length;i++){
                          rec[i]
          =new Rectangle();
                      }
                  }
                  
          public void paintComponent(Graphics g){
                      g.drawImage(bi,
          0,0,width,height,this);
                      g.setColor(Color.RED);
                      g.drawLine(startX,startY,endX,startY);
                      g.drawLine(startX,endY,endX,endY);
                      g.drawLine(startX,startY,startX,endY);
                      g.drawLine(endX,startY,endX,endY);
                      
          int x=startX<endX?startX:endX;
                      
          int y=startY<endY?startY:endY;
                      select
          =new Rectangle(x,y,Math.abs(endX-startX),Math.abs(endY-startY));
                      
          int x1=(startX+endX)/2;
                      
          int y1=(startY+endY)/2;
                      g.fillRect(x1
          -2,startY-2,5,5);
                      g.fillRect(x1
          -2,endY-2,5,5);
                      g.fillRect(startX
          -2,y1-2,5,5);
                      g.fillRect(endX
          -2,y1-2,5,5);
                      g.fillRect(startX
          -2,startY-2,5,5);
                      g.fillRect(startX
          -2,endY-2,5,5);
                      g.fillRect(endX
          -2,startY-2,5,5);
                      g.fillRect(endX
          -2,endY-2,5,5);
                      rec[
          0]=new Rectangle(x-5,y-5,10,10);
                      rec[
          1]=new Rectangle(x1-5,y-5,10,10);
                      rec[
          2]=new Rectangle((startX>endX?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<rec.length;i++){
                              
          if(rec[i].contains(me.getPoint())){
                                  current
          =st[i];
                                  
          this.setCursor(st[i].getCursor());
                                  
          return;
                              }
                          }
                          
          this.setCursor(cs);
                          current
          =States.DEFAULT;
                      }
                  }
                  
          public void mouseExited(MouseEvent me){
                      
                  }
                  
          public void mouseEntered(MouseEvent me){
                      
                  }
                  
          public void mouseDragged(MouseEvent me){
                      
          int x=me.getX();
                      
          int y=me.getY();
                      
          if(current==States.MOVE){
                          startX
          +=(x-tempX);
                          startY
          +=(y-tempY);
                          endX
          +=(x-tempX);
                          endY
          +=(y-tempY);
                          tempX
          =x;
                          tempY
          =y;
                      }
          else if(current==States.EAST||current==States.WEST){
                          
          if(currentX==START_X){
                              startX
          +=(x-tempX);
                              tempX
          =x;
                          }
          else{
                              endX
          +=(x-tempX);
                              tempX
          =x;
                          }
                      }
          else if(current==States.NORTH||current==States.SOUTH){
                          
          if(currentY==START_Y){
                              startY
          +=(y-tempY);
                              tempY
          =y;
                          }
          else{
                              endY
          +=(y-tempY);
                              tempY
          =y;
                          }
                      }
          else if(current==States.NORTH_EAST||current==States.NORTH_EAST||
                              current
          ==States.SOUTH_EAST||current==States.SOUTH_WEST){
                          
          if(currentY==START_Y){
                              startY
          +=(y-tempY);
                              tempY
          =y;
                          }
          else{
                              endY
          +=(y-tempY);
                              tempY
          =y;
                          }
                          
          if(currentX==START_X){
                              startX
          +=(x-tempX);
                              tempX
          =x;
                          }
          else{
                              endX
          +=(x-tempX);
                              tempX
          =x;
                          }
                          
                      }
          else{
                          startX
          =tempX;
                          startY
          =tempY;
                          endX
          =me.getX();
                          endY
          =me.getY();
                      }
                      
          this.repaint();
                  }
                  
          public void mousePressed(MouseEvent me){
                      showTip
          =false;
                      tempX
          =me.getX();
                      tempY
          =me.getY();
                  }
                  
          public void mouseReleased(MouseEvent me){
                      
          if(me.isPopupTrigger()){
                          
          if(current==States.MOVE){
                              showTip
          =true;
                              p
          =me.getPoint();
                              startX
          =0;
                              startY
          =0;
                              endX
          =0;
                              endY
          =0;
                              repaint();
                          } 
          else{
                              jf.dispose();
                              updates();
                          }
                          
                      }
                  }
                  
          public void mouseClicked(MouseEvent me){
                      
          if(me.getClickCount()==2){
                          
          //Rectangle rec=new Rectangle(startX,startY,Math.abs(endX-startX),Math.abs(endY-startY));
                          Point p=me.getPoint();
                          
          if(select.contains(p)){
                              
          if(select.x+select.width<this.getWidth()&&select.y+select.height<this.getHeight()){
                                  get
          =bi.getSubimage(select.x,select.y,select.width,select.height);
                                  jf.dispose();
                                  updates();
                              }
          else{
                                  
          int wid=select.width,het=select.height;
                                  
          if(select.x+select.width>=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的濃香.
          posted on 2007-08-31 14:10 千里冰封 閱讀(2415) 評論(14)  編輯  收藏 所屬分類: JAVASE

          FeedBack:
          # re: JAVA截屏程序(第三版)
          2007-08-31 16:19 | BeanSoft
          再來支持一下! 收藏.  回復  更多評論
            
          # re: JAVA截屏程序(第三版)
          2007-08-31 17:20 | 大獅子頭
          不錯的持續改進。  回復  更多評論
            
          # re: JAVA截屏程序(第三版)
          2007-08-31 19:34 | 168housr
          真的不錯,請問JAVA可以截取IE圖像么?  回復  更多評論
            
          # re: JAVA截屏程序(第三版)
          2007-08-31 20:19 | 千里冰封
          @168housr
          只要打開了IE,IE上的圖像當然可以截了
          不過,IE的圖片不是可以直接保存的嗎?  回復  更多評論
            
          # re: JAVA截屏程序(第三版)
          2007-09-03 14:40 | Samuel(zhangjf@bc-info.net)
          呵呵!不錯,改進的速度很快!、
          接著!我又要提建議了。。。
          1、增加縮小到系統托盤區的功能。這樣就可以想呼出來就呼出來。盡量用JDK6,建議不要用其他的插件。同時保持截屏的時候隱藏窗口。

          到此我認為應該做到的,都做到了。剩下的事情就是優化界面的事情了。當然這件事情應該讓其他需要此功能的人自己去完成。
            回復  更多評論
            
          # re: JAVA截屏程序(第三版)
          2007-09-03 14:47 | Samuel(zhangjf@bc-info.net)
          忘了,還有一個建議:

          1、建議增加批量存儲,對所有截屏到的所有文件進行一起存儲。編碼按前綴+序號存儲。前綴要求用戶輸入。。

          如果提高一點說的話,可以按照用戶一定文件名模板來存儲文件。支持特定的通配符(比如:3位數字順序排號)。好像這樣難度就增加了。。

          上面僅僅是建議。僅供參考!!  回復  更多評論
            
          # re: JAVA截屏程序(第三版)
          2007-09-03 15:03 | 千里冰封
          @Samuel(zhangjf@bc-info.net)
          呵呵
          多謝建議,我會改進的  回復  更多評論
            
          # re: JAVA截屏程序(第三版)
          2008-03-07 14:12 | everrest
          能不能有程序的詳解啊!  回復  更多評論
            
          # re: JAVA截屏程序(第三版)[未登錄]
          2008-03-19 13:39 | prince
          如何把這個CaptureScreen設計成網絡插件?  回復  更多評論
            
          # re: JAVA截屏程序(第三版)[未登錄]
          2008-03-19 13:40 | prince
          如何把這個CaptureScreen設計成網頁插件  回復  更多評論
            
          # re: JAVA截屏程序(第三版)
          2008-06-16 16:04 | philip
          Can auto captureScreen by a url? like 'http://www.g.cn'?  回復  更多評論
            
          # re: JAVA截屏程序(第三版)[未登錄]
          2008-09-24 15:14 | haha
          如何運行源文件并打包為JAR  回復  更多評論
            
          # re: JAVA截屏程序(第三版)[未登錄]
          2009-05-09 20:38 |
          我在servlet時調用你的程序后,會退出servlet  回復  更多評論
            
          # re: JAVA截屏程序(第三版)[未登錄]
          2009-10-13 21:53 | roger
          用java進行連續截屏時鼠標會閃,請問如何使鼠標不會閃?  回復  更多評論
            
          主站蜘蛛池模板: 松江区| 雷山县| 花莲市| 长海县| 都匀市| 永顺县| 海门市| 甘泉县| 灌南县| 尤溪县| 留坝县| 平乡县| 从化市| 特克斯县| 兴宁市| 西安市| 萝北县| 桂阳县| 清苑县| 瑞安市| 南召县| 南投市| 繁峙县| 汪清县| 华池县| 乌审旗| 运城市| 深州市| 陇西县| 察隅县| 赫章县| 贵港市| 九江市| 大洼县| 临泽县| 衡阳市| 甘德县| 手游| 樟树市| 娄底市| 蓬安县|