- 仔细想想,要一口气做点有价值的东西,难度还是挺大的,倒不如模仿别人做些简单的东西看看。
只是为了练练手,所以设计上不是很美观,不过实用性还是有点的。 - 这个工具的代码我总共用了四个类来实现:
- 首先是Screenshot.java文件,主要显示操作界面,有一个菜单栏和4个菜单选项;
- 然后是ScreenFrame.java文件,功能是进行截图操作;
- 接着是ScreenAll.java文件,功能是直接截取全屏操作;
- 最后是ImageViewer.java文件,功能是查看图片操作。
- 废话少说,直接上代码,你们自己跑去吧。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Screenshot extends JFrame
{
JMenuBar menuBar ;
JMenu menu;
JMenuItem item1,item2,item3,item4;
public Screenshot(){
Container con = getContentPane();
menuBar = new JMenuBar();
menu = new JMenu("菜单");
item1 = new JMenuItem("截图");
item2 = new JMenuItem("查看图片");
item3 = new JMenuItem("截取全屏");
item4 = new JMenuItem("退出");
setName("图片截取和查看软件");
setBounds(200,199,300,250);
JButton button = new JButton("开始截图");
menu.add(item1);
menu.add(item2);
menu.add(item3);
menu.add(item4);
menuBar.add(menu);
setJMenuBar(menuBar);
add(button);
setVisible(true);
setResizable(false);
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
setVisible(false);
new ScreenFrame();
}
});
item1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
setVisible(false);
new ScreenFrame();
}
});
item2.addActionListener(new ActionListener(){第二个菜单选项查看图片的事件监听
public void actionPerformed(ActionEvent e){
String []s ={""};
new ImageViewer().main(s);
}
});
item3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
setVisible(false);
new ScreenAll();
}
});
item4.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String [] args){
new Screenshot();
}
}
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.awt.event.MouseEvent;
import java.awt.image.*;
import javax.imageio.ImageIO;
public class ScreenFrame extends JFrame implements java.awt.event.MouseListener //直接实现MouseListener接口
{
public ScreenFrame(){
try{
Toolkit t = Toolkit.getDefaultToolkit();
int ww = t.getScreenSize().width;
int hh = t.getScreenSize().height;
Robot r = new Robot();
BufferedImage image = r.createScreenCapture(new Rectangle(0,0,ww,hh));
JLabel label = new JLabel(new ImageIcon(image));
add(label);
addMouseListener(this);
setBounds(0,0,ww,hh);
setAlwaysOnTop(true);
setUndecorated(true) ;
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}catch(AWTException e){
}
}
int x,y,w,h;
boolean b = true;
public void mouseClicked(MouseEvent e) {
if(e.getClickCount() == 2){
try{
Robot robot = new Robot();
BufferedImage image= robot.createScreenCapture(new Rectangle(x+1,y+1,w-1,h-1));
ImageIO.write(image,"jpeg",new File("d:\\myimage.jpg"));
setVisible(false);
Runtime.getRuntime()
.exec("c:\\windows\\System32\\rundll32.exe \"C:\\Program Files\\Windows Photo Viewer\\PhotoViewer.dll\", ImageView_Fullscreen c:\\a.jpg");
JOptionPane.showMessageDialog(null,"图片存放路径为:d:\\myimage.jpg","图片路径",1);
System.exit(0);
}catch(AWTException e1){
}catch(IOException e2){
}catch(Exception e3){
}
}
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
if(b){
x=e.getX();
y=e.getY();
}
}
public void mouseReleased(MouseEvent e) {
if(b){
Graphics g = getGraphics();
g.setColor(Color.green);
g.drawRect(x,y,e.getX()-x,e.getY()-y);
w=e.getX()-x;
h=e.getY()-y;
b=false;
}
}
public static void main(String []args){
new ScreenFrame();
}
}
import java.awt.Robot
import java.awt.Toolkit
import java.awt.Rectangle
import java.awt.image.BufferedImage
import javax.swing.JOptionPane
import javax.imageio.ImageIO
import java.io.File
public class ScreenAll
{
private int x,y
public ScreenAll(){
try{
Toolkit tool = Toolkit.getDefaultToolkit()
x = tool.getScreenSize().width
y = tool.getScreenSize().height
Robot r = new Robot()
BufferedImage image = r.createScreenCapture(new Rectangle(0,0,x,y))
ImageIO.write(image,"jpeg",new File("d:\\SreenshotAll.jpg"))
Runtime.getRuntime()
.exec("c:\\windows\\System32\\rundll32.exe \"C:\\Program Files\\Windows Photo Viewer\\PhotoViewer.dll\", ImageView_Fullscreen c:\\a.jpg")
JOptionPane.showMessageDialog(null,"图片存放路径为:d:\\SreenshotAll.jpg","图片路径",1)
System.exit(0)
}catch(Exception e){
}
}
}
import java.awt.EventQueue;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class ImageViewer
{
public static void main(String [] args){
EventQueue.invokeLater(new Runnable(){
public void run(){
JFrame frame = new ImageViewerFrame();
frame.setTitle("ImageViewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class ImageViewerFrame extends JFrame
{
private JLabel label;
private JFileChooser chooser;
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT= 400;
public ImageViewerFrame(){
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
label = new JLabel();
add(label);
chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu menu = new JMenu("File");
menuBar.add(menu);
JMenuItem openItem = new JMenuItem("Open");
menu.add(openItem);
openItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
int result = chooser.showOpenDialog(null);
if(result == JFileChooser.APPROVE_OPTION){
String name = chooser.getSelectedFile().getPath();
label.setIcon(new ImageIcon(name));
}
}
});
JMenuItem exitItem = new JMenuItem("Exit");
menu.add(exitItem);
exitItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
System.exit(0);
}
});
}
}
- 以下是运行效果,用的是java的swing包做的,虽然有点简陋,但功能没差: