この記事では、一般的なJavaプログラミングの実装スクリーンショットメソッドをまとめたものです。次のように、参照のために共有してください。
方法1:
java.awt.desktop;インポートjava.awt.dimension;インポートjava.awt.rectangle;インポートjava.awt.robot;インポートjava.awt.toolkit;インポートjava.aww t.image.bufferedimage; import java.io.ファイル; javax.imageio.imageio;パブリッククラスCaptureScreen {public static void captureScreen(String FileName、String Folder)スロー{Dimens Ion Screensize = ToolKit.GetDefaultToolkit()。 robot robot = new Robot(); = new file(screenfile、folder); desktop.getdesktop().open(f); / todo auto-enerated catch block e.printstacktrace()}}}方法2:
パッケージcom.qiu.util; import java.io。*;インポートjavax.swing。*; import java.awt。*; import java.awt.event。*; import java.awt.image。 ImageIo。 )file tempfile = "、" emp.png ") ; setlayout()jlabel.add(); Capture.seticon() } private screencapture(){robot = new robot()} getContentPane()。 rech) (); int minx = min = math.min(y1、y2); 、Recy、Recw、Rech); setcursor(cursor.crosshair_cursor) .getMaximumsize()); new rectangle(toolkit.getDefaultToolkit().getScreensize()); = Robot.CreateScreencure(Toolkit.getDefaultToolkit().getScreensize);キャプチャ* / public bufferedimage getpickedimage(){return pickedimage; format * * @deprecat ed saveaspng(file file)** / @deprecated public void savetofile(file file)throws ioexception {getpickedimage()、defaultimageformater、file); png形式*/ public void saveaspng(ファイルファイル)はioexception {getpickedimage()、 "png"、file)をスローします。 IOE Xception {ImageIo.Write(getPickeDimage()、 "jpeg"、file); )// Singleton Pattern Private Screencapture = new Screencapture(Y1、X2、Y2 ndimage labullsimage = new backnergimage()。 Jlabel {public void paintComponent(グラフィックG){Super.PaintComponent(g); ); g.drawstring(x +(int)w / 2-15、int)g.drawline(linex、getheigh liney、getWidth()、int x、int height); ;方法3:
システムパレットに最小化されるため、パレットアイコンはまだ同じディレクトリに配置する必要があります。
メインスクリーンショットコードパーツは次のとおりです。
robot ro = new robot(); Toolkit tk = toolkit.getDefaultToolkit(); dimension di = tk.getscreensize(); rectangle rec = new rectangle(0,0、di.widt h、di.height); bubledimage bi = ro 。
(ソースコードはCSDNからです)
java.awt。*;インポートjava.awt.datatransfer.dataflavor; import java.awt.datatransfer.transferable; import java.awt.datatransfer.unsupportedflavore xcection; Import java.awt.event。 java.io jtabbedpane jtp; //単一の場所多くの写真プライベートインデックス; //常に増加するインデックス、プライベートjradiobutton java、system; // javaインターフェイス、システムインターフェイス/** CaptureScreen*の新しいインスタンスを作成するために使用されます* / ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::づく:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::づ 火::::: ::::::::::::::::::::::: public captureScreen(){Super( "Screen Capture Software(Third Edition)"); setlookendfeel(umaintystemandfeelclassname()){exe.printstacktrace(); Top、jtabbedpane.scroll_tab_layout);これ); Jlabel( "Screen Capture"、jlabel.center); ; jpanel(); // 2つのラジオボタンJp.add(java = new Jradiobutton( "Java Interface")); This)jp.createTiTledborder(「インターフェイススタイル」); new jpanel(); :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::づ 火::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::づ 火::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::づ 火::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::づ 火::::: ::::::::::::::::::::::::::::::::::::: :::: :::: :::: :::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::: ::::: :::。 .SOUTH); {public void closing(windowsevent we){Captures.setvisible(false)}}} {SystemTray st = systemtray.getsystemtray(); ().getResource( "bg.gif")) ActionEvent ae){joptionpane.showMessageAlog(CaptureScreen.this、 "<html> <font color = red> <center> <h 2> bout </h2> </center> </font>"これは純粋なハバですスクリーンキャプチャプログラム<br>以前のベース、いくつかの一般的に使用される関数、たとえばバッチ保存、複数のクリップ、およびシステムがある場合は<br> " +"を追加しますご質問があれば、お気軽にお問い合わせください。<br> " +" <font size = 5 color = blue>著者:qianli bingfeng <br> " +" <i> qq:24325142 </i> <br> </font> </html> ");}}); pm.addseparator(); pm.add(new menuitem(" show main window "))。 {CaptureScreen.setVisible(true)}}); ) 「Java Screen Capture」、PM);例外exe){exe.printstacktrace();追加、/タブパンに直接パネルを追加するだけで、何もする必要はありません} picpanel(get); pic); ro = new robot(); Toolkit.getDefaultToolkit(); (rec); jframe jfsp = new temp(bi、di.height) (true);すべての写真 */ public void dosaveall(){if(jtp.getTabcount()== 0){joptionpane.showmessagedialog(「写真は空ではない」、「エラー」、joptionpane.error_message); } jfilechooser jfc.addchoosablefilefilter( "); (new jpgfilter() ); jfc.addchoosablefilefilter(new pngfilter(); ext = file.tostrin g()。 about = "png"; {ext = ext.substring(0、ext.lastindexof(ab out.tolowercase())) }} //すべての写真を保存するために特別に使用されるスレッドクラス、それを保存する必要がありますプログレスバープライベートクラスsaveallthread extends jdialog実装{プライベート文字列名; //ファイル名ヘッダープライベート文字列ext; //ファイルファイルフォーマットプライベートjprogressbar J Pb; //進行状況バープライベートJlabel情報; //情報表示バープライベートint Alltask、donetask; //すべてのタスク、完了したタスクpublic saveallthread(string name、string ext){super(cupturescreen.this、 "save" " 、this.name = ext; .setminimum(0); addd(borderlayout.nor); ).start(); private void setprogressbartring(){""+donetask+"/"+alltask} {int i = 0; i <alltask; i ++); {picpanel pp =(picpanel)jtp.getComponentat(i); settext(</b> <br> "+f.tostring+" </html> "); SetValue(donetask); this.dispose();これは、「エラー」、jfilechooser( "。");新しいbmpfilter()); .getSelectedFile(); jpg "; if(!ext.Endswith("。jpg ")){string ns = ext+"。jpg "; file = new file(ns);}} else if(ff instanceof pngfilter){about =" png "; if( "。png"){string ns = ext+".png"; ext.Endswith( "。BMP")){string ns = ext+"。bmp"; ( ".gif"){string ns = ext+"。gif"; new file(ns)}}} ! ");} else joptionpane.showmessageialog(this、" save failed! ") public void docopy(最終的なバッファリダイムイメージ){if(get == null){joptionpane.showmessageialog(「画像は空ではない」、「エラー」、joptionpane new Transferable(){getTransferdataflavors(){dataflavor.imageflavor}} public boolean avorsported(dataflavor flavor){dataflavor.imageflavor.equalsフレーバー)unsportedflavorexception {isdataflavorsupported(フレーバー) 、「システム貼り付けボードにコピー!!」) error_message)//プライベートボイドdoclose(jtp.Remove(c); getSource() uimanager .getcrossplatformandfeelclassname()); )swingutivess.updatecomponterui(これ){exe.printstacktrace()そして、タブパンパネルに入れることができます//プライベートクラスのピクパネルを保存およびコピーするための独自のメソッドセットもあります。 Bufferedimag e get public picpanel(bufferedimage get){this.get = get; ){save = new jbutton( "save(s)"); ')setmnemonic(' x '); Jlab El Icon = new Jlabel(get); (This); ){Docopy(get); (){} public boolean accept(file file){if(file.tostring() string getDe script(){return " *.bmp(bmp image)"; file){if(file.tostring().tolowercase()。 j pg(jpg image) ";}} // gif形式でフィルターを保存プライベートクラスのgiffilterはjavax.swing.filechooser.filechooser.filefilter {public giffilter(){} public boolean accept(file file){if(fi le.tostring( )TolowerCase()。 // PNGフォーマットフィルターの保存プライベートクラスpngfilter拡張javax.swing.filechooser.filefilter {public boolean accept(file file){if(file.tostring()。tolowercase()。endswith( "。png")|| file.isdirectoryory ()){return true; MouseListener、MousemotionListener {private int width、starty、endx、tempx、tempy; /選択されたエリアを示すプライベートカーソルCS = new Cursor(cursor.crosshair_cursor); //一般的な民間状態のマウス状態を示しますcurrent = states.default; //現在の編集状態長方形を示します[] rec; // 8つの編集ポイントの領域/ ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::づ 火::::: :::::::::::::::::::::::::::::::::::::::::次の4つの定数は、選択した行のエンドポイントであることを示しています。 public static int start_x = 1これら2つのみを変更する必要がありますプライベートポイントp = new point(); //マウスの現在の場所はプライベートブールショーチップ= true; jf、int width、int height {bi = bi; this.AddmouseMotionListener(This); ;)} paintComponent(G.Drawimage(width、height、this); G.drawline(endy、endy、startx、startx、endy); Endx; :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::づ 火::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::づ 火::::: :::::::::::::(startx+endx)/2; 2,5,5); -2,5,5); Starty-2,5,5); ] =新しい長方形(x1-5、y-5,10,10); ] = new rectangle((startx> endx?startx:endx)-5、y1-5,10,10); ?starty:endy)-5,10,10); X-5、(Starty> Endy?Starty:5,10、10); (color.cyan); G.DrawString(「左マウスボタンを押して、スクリーンショット領域を配置しないでください」、PX、P.Y+15) 、西部など。Switch(状態){currentx = 0; BREAK:currentX> start_x:current = 0; 0; =(starty> end_y:startx> startx:end_x); start_x) MouseMoved(Me)(showtip);あなたが選択したい領域は、domousemoved(mousevent me){me.getpoint()){this.setcursor(cursor.move_cursor)){me.getpoint()){ else {states [] st = states.values(); [i]; MouseEvent Me){} Mousedrag ged(MouseEvent Me){Me.getX() Starty+=(y-tempy); ){currentX == startx+=(x-tempx); | current states.South){currenty == starty+=(y-tempy) current state.north_east || current.north_east || y; endy+=(ytempy); tempx = x} = false; me.getx(); true; mouseEvent me){if(me.getClickCount()== 2){// rectangle rec = new rectangle(star tx、starty、math.abs(endx -startx)、math.abs(endy -starty)); = me.getpoint(); if(select.contains(p)){if(select.x+select.width()&&select。y+select.height <this.getheight(){get = bi .getSubimage(select.y、select.height); x+ select.width> = this.getWidth()){wid = this.getWidth() - select.x}} )-select.y; []){shingutilities.invokelater(new runnable(){public void run(){new CaptureScreen();}}}}}} //北の北西の角(新しいカーソル(cursor.n_resize_cursor))、north_east(new cursor(cursor.ne _resize_cursor))、east(new cursor .e_resize_cursor))、south_east(cursor.se_resize_cursor) )、)、South(新しいカーソル(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))、(デフォルト(デフォルト) cursor.default_cursor);この記事がみんなのJavaプログラミングに役立つことを願っています。