<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    千里冰封
    JAVA 濃香四溢
    posts - 151,comments - 2801,trackbacks - 0
    呵呵,昨天也看到朋友的留言,又增加了一些功能,

    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 千里冰封 閱讀(2412) 評論(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進行連續截屏時鼠標會閃,請問如何使鼠標不會閃?  回復  更多評論
      
    主站蜘蛛池模板: 亚洲视频国产视频| 免免费国产AAAAA片| 亚洲日韩一区二区三区| 亚洲精品乱码久久久久久| 成人国产mv免费视频| 2019中文字幕在线电影免费| 一级毛片免费播放试看60分钟| 亚洲精品人成网在线播放影院| 久久亚洲AV午夜福利精品一区| 亚洲午夜精品一级在线播放放| 成人人观看的免费毛片| 在线观看的免费网站无遮挡| 国产vA免费精品高清在线观看| 久久久久亚洲精品无码网址色欲 | 亚洲国产美女在线观看| 亚洲va无码手机在线电影| 亚洲国产精品嫩草影院久久| 午夜小视频免费观看| 噼里啪啦免费观看高清动漫4| 国产好大好硬好爽免费不卡| 中国内地毛片免费高清| 一区二区三区视频免费观看| 妇女自拍偷自拍亚洲精品| 亚洲乱妇老熟女爽到高潮的片| 亚洲一卡2卡3卡4卡国产网站 | 一区二区三区在线免费看| 久久精品无码专区免费| 久香草视频在线观看免费| 国产成人亚洲精品91专区高清 | 午夜免费福利小电影| 久久国产乱子免费精品| 免费污视频在线观看| 久久久久久久岛国免费播放| 任你躁在线精品免费| a级在线免费观看| 成人性生交大片免费看中文| a成人毛片免费观看| 国产免费爽爽视频在线观看| 在线涩涩免费观看国产精品 | 四虎影视在线看免费观看| 色网站在线免费观看|