import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
*
* @author rgbhsodiy
*/
public class test extends JFrame implements MouseListener,MouseMotionListener{
private BufferedImage buffImage;
private Dimension d;
private int startX=0,startY=0,endX=0,endY=0;
private JPopupMenu pop;
private JMenuItem[] menuItem;
private String[] itemName={"Save","Recapture","Exit"};
private char[] itemShort={'S','R','E'};
public test(){
try{
pop=new JPopupMenu();
menuItem=new JMenuItem[itemName.length];
for(int i=0;i<itemName.length;i++)
{
menuItem[i]=new JMenuItem(itemName[i]);
menuItem[i].setMnemonic(itemShort[i]);
pop.add(menuItem[i]);
}
pop.setVisible(false);
pop.setInvoker(this);
Robot robot=new Robot();
d=Toolkit.getDefaultToolkit().getScreenSize();
buffImage=robot.createScreenCapture(new Rectangle(0,0,d.width,d.height));
this.setSize(d);
this.setUndecorated(true);
this.setAlwaysOnTop(true);
this.addMouseListener(this);
this.addMouseMotionListener(this);
this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
this.setVisible(true);
}
catch(Exception e){
e.printStackTrace();
}
}
@Override
public void paint(Graphics g){
g.drawImage(buffImage, 0,0, d.width,d.height,this);
g.setColor(Color.red);
g.drawRect(startX,startY,endX-startX,endY-startY);
} public void mouseClicked(MouseEvent e) {
} public void mousePressed(MouseEvent e) {
startX=e.getX();
startY=e.getY();
} public void mouseReleased(MouseEvent e) {
endX=e.getX();
endY=e.getY();
repaint();
pop.setLocation(endX, endY);
pop.setVisible(true);
} public void mouseEntered(MouseEvent e) {
} public void mouseExited(MouseEvent e) {
} public void mouseDragged(MouseEvent e) {
endX=e.getX();
endY=e.getY();
repaint();
} public void mouseMoved(MouseEvent e) {
} public static void main(String argv[])
{
new test();
}
}
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
/**
*
* @author rgbhsodiy
*/
public class test extends JFrame implements MouseListener,MouseMotionListener{
private BufferedImage buffImage;
private Dimension d;
private int startX=0,startY=0,endX=0,endY=0;
private JPopupMenu pop;
private JMenuItem[] menuItem;
private String[] itemName={"Save","Recapture","Exit"};
private char[] itemShort={'S','R','E'};
public test(){
try{
pop=new JPopupMenu();
menuItem=new JMenuItem[itemName.length];
for(int i=0;i<itemName.length;i++)
{
menuItem[i]=new JMenuItem(itemName[i]);
menuItem[i].setMnemonic(itemShort[i]);
pop.add(menuItem[i]);
}
pop.setVisible(false);
pop.setInvoker(this);
Robot robot=new Robot();
d=Toolkit.getDefaultToolkit().getScreenSize();
buffImage=robot.createScreenCapture(new Rectangle(0,0,d.width,d.height));
this.setSize(d);
this.setUndecorated(true);
this.setAlwaysOnTop(true);
this.addMouseListener(this);
this.addMouseMotionListener(this);
this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
this.setVisible(true);
}
catch(Exception e){
e.printStackTrace();
}
}
@Override
public void paint(Graphics g){
g.drawImage(buffImage, 0,0, d.width,d.height,this);
g.setColor(Color.red);
g.drawRect(startX,startY,endX-startX,endY-startY);
} public void mouseClicked(MouseEvent e) {
} public void mousePressed(MouseEvent e) {
startX=e.getX();
startY=e.getY();
} public void mouseReleased(MouseEvent e) {
endX=e.getX();
endY=e.getY();
repaint();
pop.setLocation(endX, endY);
pop.setVisible(true);
} public void mouseEntered(MouseEvent e) {
} public void mouseExited(MouseEvent e) {
} public void mouseDragged(MouseEvent e) {
endX=e.getX();
endY=e.getY();
repaint();
} public void mouseMoved(MouseEvent e) {
} public static void main(String argv[])
{
new test();
}
}
pop.setVisible(false); ---》
pop.setVisible(true);
我开始将pop.setVisible(false);
当鼠标按下释放后,将pop.setVisible(true);
弹出式菜单用鼠标触到后,会显示并且JFrame上的图片会消失
不知为何,当把弹出式菜单设置在图片覆盖不到的地方也能正常显示