2012-06-12 5 views
6

Ich mache eine Java-basierte Screenshot-Anwendung, und ich möchte es so machen, wenn Sie eine Kombination von Tasten auf Ihrer Tastatur etwas wie this video passiert, wo Sie wählen und Bereich auf Ihrem Bildschirm, und es nimmt einen Screenshot des ausgewählten Bereichs.Wählen Sie einen Bereich zur Aufnahme mit der Maus

Wie wählt man einen Bereich, der mit der Maus erfasst werden soll?

+0

Ich habe gerade den Cursor individuelle hinzufügen. Ich habe keine Ahnung, wie ich damit anfangen kann, den Bildschirm auszuwählen. –

+0

Was haben Sie unternommen, um dieses Problem zu lösen, außer diese Frage zu stellen? – Jeffrey

+1

Ich habe seit mindestens 3 Tagen nach einem Tipp gesucht, wie es geht. Ich habe noch keine gefunden, also habe ich beschlossen, diese Frage zu stellen. –

Antwort

16

Beginnen Sie mit so etwas wie dieses.

Screen Capture Rectangle

import java.awt.*; 
import java.awt.event.*; 
import java.awt.image.*; 
import javax.swing.*; 

/** Getting a Rectangle of interest on the screen. 
Requires the MotivatedEndUser API - sold separately. */ 
public class ScreenCaptureRectangle { 

    Rectangle captureRect; 

    ScreenCaptureRectangle(final BufferedImage screen) { 
     final BufferedImage screenCopy = new BufferedImage(
       screen.getWidth(), 
       screen.getHeight(), 
       screen.getType()); 
     final JLabel screenLabel = new JLabel(new ImageIcon(screenCopy)); 
     JScrollPane screenScroll = new JScrollPane(screenLabel); 

     screenScroll.setPreferredSize(new Dimension(
       (int)(screen.getWidth()/3), 
       (int)(screen.getHeight()/3))); 

     JPanel panel = new JPanel(new BorderLayout()); 
     panel.add(screenScroll, BorderLayout.CENTER); 

     final JLabel selectionLabel = new JLabel(
       "Drag a rectangle in the screen shot!"); 
     panel.add(selectionLabel, BorderLayout.SOUTH); 

     repaint(screen, screenCopy); 
     screenLabel.repaint(); 

     screenLabel.addMouseMotionListener(new MouseMotionAdapter() { 

      Point start = new Point(); 

      @Override 
      public void mouseMoved(MouseEvent me) { 
       start = me.getPoint(); 
       repaint(screen, screenCopy); 
       selectionLabel.setText("Start Point: " + start); 
       screenLabel.repaint(); 
      } 

      @Override 
      public void mouseDragged(MouseEvent me) { 
       Point end = me.getPoint(); 
       captureRect = new Rectangle(start, 
         new Dimension(end.x-start.x, end.y-start.y)); 
       repaint(screen, screenCopy); 
       screenLabel.repaint(); 
       selectionLabel.setText("Rectangle: " + captureRect); 
      } 
     }); 

     JOptionPane.showMessageDialog(null, panel); 

     System.out.println("Rectangle of interest: " + captureRect); 
    } 

    public void repaint(BufferedImage orig, BufferedImage copy) { 
     Graphics2D g = copy.createGraphics(); 
     g.drawImage(orig,0,0, null); 
     if (captureRect!=null) { 
      g.setColor(Color.RED); 
      g.draw(captureRect); 
      g.setColor(new Color(255,255,255,150)); 
      g.fill(captureRect); 
     } 
     g.dispose(); 
    } 

    public static void main(String[] args) throws Exception { 
     Robot robot = new Robot(); 
     final Dimension screenSize = Toolkit.getDefaultToolkit(). 
       getScreenSize(); 
     final BufferedImage screen = robot.createScreenCapture(
       new Rectangle(screenSize)); 

     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       new ScreenCaptureRectangle(screen); 
      } 
     }); 
    } 
} 
+0

Wow danke so viel Mann! So hilfreich. Ich frage mich, hast du das gemacht? –

+0

Okay, ich akzeptierte es. Danke nochmal, Mann. –

+0

Dies funktioniert nur, wenn Sie einen Screenshot der laufenden Java-Anwendung erfassen. Sie können keine anderen Anwendungen auf dem Desktop des Benutzers anzeigen. Ich dachte, Sie wollten eine allgemeine Bildschirmaufnahme-App, die bedeutet, dass Sie Swing nicht verwenden können. – chubbsondubs

Verwandte Themen