最近在做个模拟QQ截图的小工具玩,截取屏幕图片这部分通过查资料已经搞定,现在问题就在于,怎么样像QQ截图那样可以在显示器上画出个区域,供我截取所选区域的图片。希望各位不啬赐教,小北不想要现成的项目代码,给我些许点拔就好了。谢谢!
解决方案 »
- 请教一个问题
- 关于JAVA静态字符串数组动态分配的问题
- 请问JAVA如何操纵其他的WEB或FORM程序,给个大概思路,谢谢!
- 高手在接招,100分,希望详细回答,此分只份一人.
- 请问各位高手,怎么用图形从数据库实时反应工程的进度,用什么类?~~急急
- 请教各位一个问题,关于读文件的,谢谢
- final常量报错,请教?
- 请教一个问题!!
- 求助,UNIX(AIX)下如何设置CLASSPATH?
- setText(null)为啥需要两次才能清零
- Jasper~~总报 Error i n i t i a l i z i n g graphic e n v i r o n m e n t字符集相关
- java的二维数据可以对整列进行操作吗?
package test;import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.HashMap;
import java.util.Map;import javax.swing.JFrame;
import javax.swing.JPanel;public class TestMouse extends JFrame { private static final long serialVersionUID = -362233428598274611L; private Map<String, Point> pointMap = new HashMap<String, Point>();; public TestMouse() {
init();
} private void init() {
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(getCenter(), BorderLayout.CENTER);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(new Dimension(300, 300));
this.setVisible(true);
} private JPanel getCenter() {
JPanel panel = new JPanel() { private static final long serialVersionUID = 0L; public void paintComponent(Graphics g) {
super.paintComponent(g);
if (pointMap != null && pointMap.size() > 0) {
Graphics2D g2 = (Graphics2D) g;
g2.drawLine((int) (((Point) (pointMap.get("start"))).getX()), (int) (((Point) (pointMap.get("start"))).getY()), (int) (((Point) (pointMap.get("start"))).getX()),
(int) (((Point) (pointMap.get("end"))).getY())); g2.drawLine((int) (((Point) (pointMap.get("start"))).getX()), (int) (((Point) (pointMap.get("start"))).getY()), (int) (((Point) (pointMap.get("end"))).getX()),
(int) (((Point) (pointMap.get("start"))).getY())); g2.drawLine((int) (((Point) (pointMap.get("end"))).getX()), (int) (((Point) (pointMap.get("start"))).getY()), (int) (((Point) (pointMap.get("end"))).getX()),
(int) (((Point) (pointMap.get("end"))).getY())); g2.drawLine((int) (((Point) (pointMap.get("start"))).getX()), (int) (((Point) (pointMap.get("end"))).getY()), (int) (((Point) (pointMap.get("end"))).getX()),
(int) (((Point) (pointMap.get("end"))).getY()));
}
}
};
panel.setLayout(new FlowLayout(FlowLayout.CENTER));
panel.addMouseMotionListener(new MouseMotionListener() { public void mouseDragged(MouseEvent e) {
pointMap.put("end", e.getPoint());
repaint();
} public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub } });
panel.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub } public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub } public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub } public void mousePressed(MouseEvent e) {
pointMap.clear();
pointMap.put("start", e.getPoint());
} public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub } });
return panel;
} public static void main(String[] args) {
new TestMouse(); }}
我先前想的是 用个透明的windows 容器,然后在windows上画来着。还没完成。
先用Robot截屏,然后重载JFrame绘制方法,用截屏的图片填充。再将JFrame全屏
上面的各位啊,还是得有要个透明度为0的组件再来截屏吧,要不然组件也会被拍进去的吧。