บทความนี้สรุปวิธีการใช้งานการเขียนโปรแกรมการเขียนโปรแกรม Java ทั่วไป แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
วิธีที่ 1:
นำเข้า java.awt.desktop; นำเข้า java.awt.dimension; นำเข้า java.awt.rectangle; นำเข้า java.awt.robot; นำเข้า java.awt.toolkit; นำเข้า java.aww t.image.bufferedimage; File; Import Javax.imageio.imageio; คลาสสาธารณะ CapturesCreen {โมฆะสาธารณะคงที่ capturesCreen (ชื่อไฟล์สตริงโฟลเดอร์สตริง) โยนข้อยกเว้น {ลดขนาด screensize = toolkit.getDefaultToolkit () getScreensize (); หุ่นยนต์ = ใหม่หุ่นยนต์ (); = ไฟล์ใหม่ (ScreenFile, Folder); Desktop.getDesktop () .Open (F); / TODO ที่สร้างโดยอัตโนมัติบล็อก E.PrintStackTrace ();}}}วิธีที่ 2:
แพ็คเกจ com.qiu.util; นำเข้า java.io.*; นำเข้า Javax.swing.*; นำเข้า java.awt.*; นำเข้า java.awt.event.*; นำเข้า java.awt.image.*; Im พอร์ต Javax Imageio.*;/***การจับภาพหน้าจออย่างง่าย***/screencapture คลาสสาธารณะ {// ทดสอบหลักโมฆะสาธารณะคงที่หลัก (สตริง [] args) โยนข้อยกเว้น {string userdir = systeme m.getProperty ("user.dir" ); File Tempfile = ไฟล์ใหม่ ("D:", "Temp.png"); ); การจับภาพ } Private Screencapture () {ลอง {Robot = ใหม่ Robot (); DIALOG Rech); Dialog.setVisible (FALSE); (); isfirstpoint = false; int minx = math. min (x1, x2); , recy, recw, rech); Dialog.setCursor (เคอร์เซอร์. GetPredefinedCursor (Cursor.Crosshair_Cursor); .getMaximumsize ()); รูปสี่เหลี่ยมผืนผ้าใหม่ (Toolkit.getDefaultToolkit () .getScreensize ()); = Robot.createscreencapture (รูปสี่เหลี่ยมผืนผ้าใหม่ (Toolkit.getDefaultToolkit (). getScreensize ()); หลังจากการจับภาพ* / public bufferedimage getPickedImage () {return pickedimage;} / ** รับไอคอนที่ถูกจับ รูปแบบ * * @deprecat ed แทนที่ด้วย saveaspng (ไฟล์ไฟล์) ** / @deprecated โมฆะสาธารณะ savetofile (ไฟล์ไฟล์) พ่น Ioexception {imageio.write ในรูปแบบ png*/ โมฆะสาธารณะ saveaspng (ไฟล์ไฟล์) พ่น IOException {imageio.write (getPickedImage (), "png", ไฟล์); โยน ioe xception {imageio.write (getPickedImage (), "jpeg", ไฟล์);} / ** เขียน outputstream* / โมฆะสาธารณะเขียน ); Ndimage Labfullscreenimage = New BackgroundImage () หุ่นยนต์ส่วนตัว; ขยาย JLabel {โมฆะสาธารณะ PaintComponent (กราฟิก G) {Super.PaintComponent (G); G.DrawRect (X, Y, W, H); ); liney, getWidth (), liney); ;วิธีที่ 3:
เนื่องจากมันถูกย่อให้เล็กที่สุดในพาเลทระบบจึงจำเป็นต้องใช้ไอคอนพาเลท
ส่วนรหัสภาพหน้าจอหลักคือ:
Robot RO = ใหม่ Robot (); Toolkit tk = toolkit.getDefaultToolKit (); DIMENSION DI = TK.GetScreensize (); Rectangle Rec = รูปสี่เหลี่ยมผืนผ้าใหม่ (0,0, di.widt H, di.height); . Createscreencapture (REC);
(ซอร์สโค้ดมาจาก CSDN)
นำเข้า java.awt.*; นำเข้า java.awt.datatransfer.dataflavor; นำเข้า java.awt.datatransfer.transferable; นำเข้า java.awt.datatransfer.unsupportedflavore xception นำเข้า Java.awt.event. import java.io.*; นำเข้า Javax.imageio.*; นำเข้า Java.awt.image.*; Class Public jtabbedpane jtp; // สถานที่เดียวรูปภาพหลายภาพดัชนี int ส่วนตัว; // ดัชนีที่จะเพิ่มขึ้นเสมอใช้เพื่อระบุรูปภาพส่วนตัว Jradiobutton Java, System; // อินเตอร์เฟส Java, อินเทอร์เฟซระบบ/** สร้างอินสแตนซ์ใหม่ของ CapturesCreen* / ::::::::::::::::::::::: กระทาน ::::::::::::::::::::::: กระทาน ::::::::::::::::::::::::::::::::::::::::: กระทาน. Setlookandfeel (uimanager.getSystemlookAndFeelClassName ()); ด้านบน, jtabbedpane.scroll_tab_layout); สิ่งนี้); Jlabel ("การจับภาพหน้าจอ", jlabel.center); ); jpanel (); // แผงที่มีสองปุ่มตัวเลือก jp.add (java = new Jradiobutton ("อินเทอร์เฟซ Java")); สิ่งนี้); JPANEL ใหม่ (); ::::::::::::::::::::::: กระทาน ::::::::::::::::::::::: กระทาน ::::::::::::::::::::::: กระทาน ::::::::::::::::::::::: กระทาน ::::::::::::::::::::::::::::::::::: กระทาน. . South); {public void windowclosing (windowevent we) {capturescreen.his.setvisible (เท็จ); () .getResource ("bg.gif")); ActionEvent AE) {JOptionPane.ShowMessageDialog (CapturesCreen.his, "<html> <font color = red> <center> <h 2> เกี่ยวกับ </h2> </enter> </font>" + "นี่คือ Java บริสุทธิ์บริสุทธิ์ โปรแกรมจับภาพหน้าจอ <br> เพิ่มไปยังพื้นฐานก่อนหน้าฟังก์ชั่นที่ใช้กันทั่วไปบางอย่าง <br> " +" ตัวอย่างเช่นการบันทึกแบทช์หลายคลิปและคัดลอกไปยังบอร์ดวางระบบ คำถามใด ๆ ระหว่างการใช้งานโปรดติดต่อเรา <br> " +" <font size = 5 color = blue> ผู้แต่ง: Qianli Bingfeng <br> " +" <i> qq: 24325142 </i> <br> </font> </html> ");}}); pm.addsparator (); pm.add (ใหม่ menuitem (" แสดงหน้าต่างหลัก ")). addactionListener (ใหม่ actionListener () {โมฆะสาธารณะแอ็คชั่น {CapturesCreen.his.setVisible (จริง);}}); ); "การจับภาพหน้าจอ Java", PM); Exe Exe) {exe.printstacktrace (); เพิ่ม // สิ่งปัจจุบันจะต้องมีการล้างและ tabpane จะถูกใส่อีกครั้งถ้า (ดัชนี == 0) {C.RemoveAll (); เพียงเพิ่มแผงควบคุมไปยัง tabpane โดยตรง // คุณไม่ต้องทำอะไรเลย} picpanel pic = ใหม่ picpanel (รับ); PIC); ro = ใหม่หุ่นยนต์ (); (rec); (จริง); รูปภาพทั้งหมด */ โมฆะสาธารณะ DosaveAll () {ถ้า (jtp.getTabcount () == 0) {Joptionpane.showMessagedialog (นี่ "ภาพไม่สามารถว่างเปล่า !!", "ข้อผิดพลาด", joptionpane.error_message); } jfilechooser jfc = ใหม่ jfilechooser ("."); gfilter () ); ext = file.tostrin g (). ToLowerCase (); เกี่ยวกับ = "png"; {ext = ext.substring (0, ext.lastindexof (ab out.toLowerCase ())); }} // คลาสเธรดที่ใช้เป็นพิเศษเพื่อบันทึกรูปภาพทั้งหมดนอกจากนี้ยังต้องแสดงมันบันทึกความคืบหน้าบาร์คลาสส่วนตัว SaveAllThread ขยาย jDialog onprement runnable {ชื่อสตริงส่วนตัว; // ชื่อไฟล์ส่วนหัวสตริงส่วนตัว J PB; // A Progress Bar Private JLabel Info; // ข้อมูลแสดงแถบข้อมูลส่วนตัว int AllTask, Donetask; // งานทั้งหมด, งานที่เสร็จสมบูรณ์สาธารณะ SaveAllThread (ชื่อสตริง, สตริง ext) {super (capturescreen.this, "บันทึก" จริง); .SetMinimum (0); this.add (ข้อมูล, Borderlayout.nor th); ). start ();} โมฆะส่วนตัว setProgressBarString () {jpb.setstring (""+donetask+"/"+alltask); {picpanel pp = (picpanel) jtp.getComponentat (i); SetText ("<html> <b> การบันทึกเป็น: </b> <br>"+f.toString ()+"</html>" SetValue (Donetask); this.dispose ();}}} / ***กระบวนการสาธารณะและบันทึกวิธีการรูปภาพ*วิธีนี้ไม่ได้เป็นส่วนตัว* / โมฆะสาธารณะ Dosave (BufferedImage Get) {ลอง {ถ้า (get == null) "ภาพนี้ไม่สามารถว่างเปล่าได้ !! ใหม่ bmpfilter ()); . GetSelectedFile (); jpg "; ถ้า (! ext.endswith (". jpg ")) {string ns = ext+". jpg "; ไฟล์ = ไฟล์ใหม่ (ns);}} อื่นถ้า (ff instanceof pngfilter) {เกี่ยวกับ =" png "; if (! ext.endswith (". png")) {string ns = ext+".png"; ext.endswith (". bmp")) {string ns = ext+". bmp"; (". gif")) {String ns = ext+". gif"; ซ ");} else joptionpane.showMessageDialog (นี่," บันทึกล้มเหลว! ");}} catch (Exex exe) {exe.printstacktrace ();}} /** *การประมวลผลสาธารณะเพิ่มภาพปัจจุบันลงในวิธีคลิปบอร์ด * / / โมฆะสาธารณะ docopy (ภาพบัฟเฟอร์ขั้นสุดท้าย) {ลอง {ถ้า (get == null) {joptionpane.showmessagedialog (นี่ "ภาพไม่สามารถว่างเปล่า !!", "ข้อผิดพลาด", joptionpane. error_message); transferable ใหม่ () {public dataflavor [] getTransferDataflavors () {ส่งคืน dataflavor ใหม่ [] {dataflavor.imageflavor}; Flavour) unsupportedflavorexception, ioexception {ถ้า (isdataflavorsupported (รสชาติ)) ภาพกลับ; "คัดลอกไปยังบอร์ดวางระบบ !!")} catch (Exception exe) {exe.printstacktrace (); ERROR_MESSAGE); getSource (); ถ้า (source == start) {dostart (); Uimanager. GetCrossplatformlookandfeelclassName ()); ); และหนึ่งสามารถใส่ลงในแผง Tabpane // นอกจากนี้ยังมีชุดของวิธีการของตัวเองสำหรับการจัดการการออมและการคัดลอก picpanel คลาสส่วนตัวขยาย JPanel ใช้ actionListener {jbutton บันทึกคัดลอกปิด; // bufferedimag ซึ่งบ่งชี้การบันทึก, การคัดลอก, ปิด BUNDENTIMAGE E GET; // รับรูปภาพของ PICPANEL สาธารณะ (BufferedImage Get) {Super (New BorderLayout ()); ) {save = new JButton ("Save (S)"); '); JLAB EL ICON = JLABEL ใหม่ (New Imageicon (GET)); (นี้); ) {docopy (get)} อื่น ๆ ถ้า (source == close) {get = null; () {} บูลีนสาธารณะยอมรับ (ไฟล์ไฟล์) {ถ้า (file.toString (). ToLowerCase (). Endswith (". BMP") || file.isdirectory ()) {ส่งคืนจริง; String getde script () {return " *.bmp (อิมเมจ BMP)";}} // บันทึกตัวกรองใน JPG รูปแบบคลาสส่วนตัว JPGFilter ขยาย javax.swing.filechooser.filefilter {สาธารณะ jpgfilter () ไฟล์) {ถ้า (file.toString () .toLowerCase (). endswith (". jpg") || file.isdirectory ()) {return true; j pg (jpg image) ";}} // บันทึกตัวกรองในรูปแบบ GIF คลาสส่วนตัว Giffilter ขยาย javax.swing.filechooser.filefilter {public giffilter () {} บูลีนสาธารณะยอมรับ (ไฟล์ไฟล์) {ถ้า (fi le.tostring ( ) .ToLowerCase (). Endswith (".gif") || // บันทึกตัวกรองรูปแบบ png private pngfilter ขยาย javax.swing.filechooser.filefilter {บูลีนสาธารณะยอมรับ (ไฟล์ไฟล์) {ถ้า (file.toString (). ToLowerCase () Endswith (". png") || file.isdirectory ()) {return true; Mouselistener, MousemotionListener {Private Bufferedimage BI; /ระบุพื้นที่ที่เลือกเคอร์เซอร์ส่วนตัว CS = เคอร์เซอร์ใหม่ (เคอร์เซอร์ Crosshair_cursor); // ระบุสถานะเมาส์ในรัฐเอกชนทั่วไปปัจจุบัน = state.default; พื้นที่ของแปดจุดแก้ไข/ :::::::::::::::::::::::: กระทาน ::::::::::::::::::::::: กระทาน ::::::::::::::::::::::::::::::::::::::::: กระทาน. สาธารณะคงที่ start_x = 1; เฉพาะสองคนนี้จะต้องเปลี่ยนจุดส่วนตัว p = จุดใหม่ (); // ตำแหน่งปัจจุบันของเมาส์ย้ายบูลีนส่วนตัว showtip = true; // ว่าจะแสดงพรอมต์ถ้าคุณกดปุ่มเมาส์ซ้าย ไม่แสดงความกว้างของสาธารณะอีกต่อไป (jframe jf, bufferedimage, ความสูง int) {this.jf = jf; this.addmousemotionlistener (นี้); ); G.Drawline (startx, endy, endx, endy); endx; int y = starty <endy? starty: endy; ::::::::::::::::::::::: กระทาน ::::::::::::::::::::::: กระทาน ::::::::::::::::::::::::::::::::::Iว่าS Int x1 = (startx+endx)/2; 2,5,5); -2,5,5); starty-2,5,5); ] = รูปสี่เหลี่ยมผืนผ้าใหม่ (X1-5, Y-5,10,10); ] = รูปสี่เหลี่ยมผืนผ้าใหม่ ((startx> endx? startx: endx) -5, y1-5,10,10); starty: Endy) -5,10,10); X-5, (starty> endy? starty: endy) -5,10, 10); (color.cyan); G.DrawString ("โปรดกดปุ่มเมาส์ซ้ายค้างไว้และไม่วางพื้นที่ภาพหน้าจอ", PX, P.Y+15); , West, ฯลฯ Void Private Initselect (สถานะ) {Switch (สถานะ) {case default: currentx = 0; BREAK; 0; = (starty> endy? end_y: start_y); start_x); MouseMoved (MouseEvent ME) {Domousemoved (ME); ภูมิภาคที่คุณต้องการเลือกแต่ละครั้งโมฆะส่วนตัว Domousemoved (MouseEvent ME) {ถ้า (select.contains (me.getPoint ())) {this.setCursor (เคอร์เซอร์ใหม่ (Cursor.move_cursor)); else {state [] st = state.values (); [i]; MouseEvent ฉัน) {} โมฆะสาธารณะ mousedrag ged (MouseEvent Me) {int x = me.getx (); starty+= (y-tempy); ) {ถ้า currentx == start_x) {startx+= (x-tempx); | current == state.south) {ถ้า (currenty == start_y) {starty+= (y-tempy); current == state.north_east || current == state.north_east || current == state.south_east || current == state.south_west) {ถ้า (currenty == start_y) {starty+= (y-tempy); y; tempx = x; = เท็จ; จริง; MouseEvent ฉัน) {ถ้า (me.getClickCount () == 2) {// rectangle rec = สี่เหลี่ยมใหม่ (Star TX, Starty, Math.Abs (endx -startx), Math.Abs (endy -starty)); = me.getPoint (); ถ้า (select.contains (p)) {ถ้า (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 (); x+ select.width> = this.getWidth ()) {wid = this.getWidth ()-select.x; ) -Select.y; []) {swingutilities.invokelater (ใหม่ runnable () {public void run () {ใหม่ capturescreen ();}}); // หมายถึงมุมตะวันตกเฉียงเหนือของทิศเหนือ (เคอร์เซอร์ใหม่ (เคอร์เซอร์. n_resize_cursor)), North_east (เคอร์เซอร์ใหม่ (เคอร์เซอร์. ne _resize_cursor)), ตะวันออก (เคอร์เซอร์ใหม่ (เคอร์เซอร์. e_resize_cursor)) ), ใต้ (เคอร์เซอร์ใหม่ (Cursor.S_RESIZE_CURSOR)), SOUTH_WEST (เคอร์เซอร์ใหม่ (Cursor.sw_ resize_cursor)), ตะวันตก (เคอร์เซอร์ใหม่ (เคอร์เซอร์ เคอร์เซอร์ (Cursor.default_cursor));ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน