Bildervorschau, MouseDragged das Bild verschieben

Zidinjo

Mitglied
Hallo meine Freunde,

ich versuche grade eine Windows-Fotoanzeige nachzuprogrammieren. Bis jetzt habe ich alles ganz gut hinbekommen nur fehlt mir wenn ich reinzoome, dass ich mit einem Mausklick mein Bild verschieben kann. Hat jemand eine Ahnung wie man dieses realisieren kann ?

Code

Java:
package de.marvin.oopLabor5;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.File;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;

public class Fenster extends JPanel implements ActionListener,MouseListener
{
	private static final long serialVersionUID = 1L;

	private JButton[] buttons = new JButton[5];
	private File[] bilder;
	File myDirectory = new File ("pics/verzeichnis");

	private final ImageIcon bild1 = new ImageIcon("pics/luppeWeg.png");
	private final ImageIcon bild2 = new ImageIcon("pics/luppeRein.png");
	private final ImageIcon bild3 = new ImageIcon("pics/zuruck.png");
	private final ImageIcon bild4 = new ImageIcon("pics/back.png");
	private final ImageIcon bild5 = new ImageIcon("pics/forward.png");

	private int bildNr = 0;
	private int groesseX = 1;
	private int groesseY = 1;
	private int mousePressedX = 0;
	private int mousePressedY = 0;
	private int mouseReleasedX = 0;
	private int mouseReleasedY = 0;
	
	Fenster()
	{
		this.addMouseListener(this);
		this.setLayout(new BorderLayout());
		this.add(buttonsErstellen(), BorderLayout.SOUTH);
	}
	
	
	protected int[] setGroesse()
	{
		int[] groesse = new int[4];
		Dimension dBorder = getSize();
		Dimension dFill = new Dimension((int)(dBorder.width*groesseX),(int)(dBorder.height*groesseY));
		Point p0Fill = new Point((dBorder.width - dFill.width) /2,(dBorder.height - dFill.height) / 2);
		
		
		return groesse;
	}
	
	@Override
	protected void paintComponent(Graphics g) 
	{
		super.paintComponent(g);
		bilder = myDirectory.listFiles();
		
		int[] groesse = new int[4];
		Dimension dBorder = getSize();
		Dimension dFill = new Dimension((int)(dBorder.width*groesseX),(int)(dBorder.height*groesseY));
		Point p0Fill = new Point((dBorder.width - dFill.width) /2,(dBorder.height - dFill.height) / 2);
		
		System.out.println(p0Fill.x+" "+p0Fill.y);

		g.drawImage(verweiseToImage(bilder)[bildNr],p0Fill.x,p0Fill.y,dFill.width,dFill.height,this);
	}
	
	private Image[] verweiseToImage(File[] verweise)
	{
		Image[] dieBilder = new Image[verweise.length];
		
		for(int i = 0; i < verweise.length;i++)
		{
			dieBilder[i] = Toolkit.getDefaultToolkit().getImage(verweise[i].toString());
		}
		
		return dieBilder;
	}
	
	public JPanel buttonsErstellen()
	{
		
		JPanel buttonsP = new JPanel();
		buttonsP.setLayout(new FlowLayout());
		
		for(int i =0; i < buttons.length;i++)
		{
			switch(i)
			{
			case 0:
				buttons[i] = new JButton(); //Luppe verkleinern
				buttons[i].setIcon(bild1);
				buttonsP.add(buttons[i]);
				buttons[i].addActionListener(this);
				break;
			case 1:
				buttons[i] = new JButton(); //Luppe vergrößern
				buttons[i].setIcon(bild2);
				buttonsP.add(buttons[i]);
				buttons[i].addActionListener(this);
				break;
			case 2:
				buttons[i] = new JButton(); //Bild zurücksetzen
				buttons[i].setIcon(bild3);
				buttonsP.add(buttons[i]);
				buttons[i].addActionListener(this);
				break;
			case 3:
				buttons[i] = new JButton(); // weiter gehen
				buttons[i].setIcon(bild4);
				buttonsP.add(buttons[i]);
				buttons[i].addActionListener(this);
				break;
			case 4:
				buttons[i] = new JButton(); // zurück gehen 
				buttons[i].setIcon(bild5);
				buttonsP.add(buttons[i]);
				buttons[i].addActionListener(this);
				break;
			}
		}
		return buttonsP;
	}

	@Override
	public void actionPerformed(ActionEvent e) 
	{
		if(e.getSource() == buttons[0])
		{
			if(groesseX > 1 && groesseY >1)
			{
				groesseX--;
				groesseY--;
			}
			repaint();
			
		}
		else if(e.getSource() == buttons[1])
		{
			groesseX++;
			groesseY++;
			repaint();
		}
		else if(e.getSource() == buttons[2])
		{
			groesseX = 1;
			groesseY = 1;
			repaint();
		}
		else if(e.getSource() == buttons[3])
		{
			this.bildNr--;
			if(bildNr < 0)
			{
				this.bildNr = 5;
			}
			repaint();
		}
		else if(e.getSource() == buttons[4])
		{
			this.bildNr++;
			if(bildNr >= bilder.length)
			{
				this.bildNr = 0;
			}
			repaint();
		}
	}


	@Override
	public void mouseClicked(MouseEvent e) 
	{	
	}

	@Override
	public void mouseEntered(MouseEvent e) 
	{
		// TODO Auto-generated method stub
	  System.out.println("KLICK" +e.getX()+" "+e.getY());
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) 
	{
		mousePressedX = e.getX();
		mousePressedY = e.getY();
		repaint();
		System.out.println("KLICK" +e.getX()+" "+e.getY());
		
	}

	@Override
	public void mouseReleased(MouseEvent e) 
	{
		mouseReleasedX = e.getX();
		mouseReleasedY = e.getY();
		System.out.println("WEG"+e.getX()+" "+e.getY());
	}
}


Bei den Interfaces habe ich was ausprobiert mit e.getX usw aber ich weiß nicht wie ich das in der Berechnung mit einbinden kann.
 

Lodoss

Aktives Mitglied
Java:
package pickturePreview;

import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;

public class PicturePreviewMain extends JFrame
{
    private static final long serialVersionUID = 7563159549136652738L;


    public static void main(String[] args)
    {
        new PicturePreviewMain();
    }
    
    public PicturePreviewMain()
    {
        // initialize the window
        this.setSize(500, 500);
        this.setLayout(new BorderLayout());
        
        // picture is the "label" which contains our content picture
        JLabel picture = new JLabel(new ImageIcon(getDemoImage()));
        JScrollPane sp = new JScrollPane(picture);
        
        // this add our navigator which do the magic
        sp.getViewport().addMouseMotionListener(new MouseNavigator(sp));
        
        // add the ScrollPane to the window and set the window visible
        this.add(sp);
        this.setVisible(true);
    }
    
    // helper method to get a demo-image
    private BufferedImage getDemoImage()
    {
        try
        {
            BufferedImage picture = ImageIO.read(new URL("https://www.google.de/images/nav_logo195.png"));
            return picture;
        }
        catch (MalformedURLException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        
        return null;
    }
    
    /** 
     * this class do the magic
     * its a combination of a MouseListener and a MouseMotionListener
     * 
     * The MouseListener Tracks begin and end of the "Drag", the MouseMotionListener
     * track the "dragging"
     */
    private class MouseNavigator extends MouseAdapter implements MouseMotionListener
    {
        JScrollPane parent = null;
        
        @SuppressWarnings("unused")
        private MouseNavigator() {}
        
        public MouseNavigator(JScrollPane parent)
        {
            this.parent = parent;
        }
        
        Integer lastX = null, lastY = null;
        
        @Override
        public void mouseDragged(MouseEvent e)
        {
            // track the drag process
            int moveX = 0; int moveY = 0;
            
            // first: drag active?
            if (lastX != null && lastY != null)
            {
                // okey, drag active, calculate the amount of pixels the mouse have been moved
                moveX = e.getX() - lastX;
                moveY = e.getY() - lastY;
                
                // now adjust the viewport of the ScrollPane with that amount
                parent.getViewport().setViewPosition(new Point(
                        parent.getViewport().getViewPosition().x - moveX,
                        parent.getViewport().getViewPosition().y - moveY));
            }
            // track the new point of the drag
            lastX = e.getX();
            lastY = e.getY();
        }

        @Override
        public void mousePressed(MouseEvent e)
        {
            // track start point of the drag
            lastX = e.getX();
            lastY = e.getY();
            
        }

        @Override
        public void mouseReleased(MouseEvent e)
        {
            // reset drag pixel position
            lastX = null;
            lastY = null;
        }
    }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Bildervorschau macht Probleme AWT, Swing, JavaFX & SWT 22
S Swing Bildervorschau AWT, Swing, JavaFX & SWT 3
M JavaFX javafx mousedragged klappt nicht AWT, Swing, JavaFX & SWT 2
M mouseDragged im MouseMotionListener AWT, Swing, JavaFX & SWT 1
S 2D-Grafik MouseDragged Linien zeichnen AWT, Swing, JavaFX & SWT 4
P JFrame manuell Grösse verändern durch 'mouseDragged' AWT, Swing, JavaFX & SWT 3
R Swing Verschieben eines jButtons mittels MouseDragged AWT, Swing, JavaFX & SWT 4
Landei Swing MouseDragged auf Containerebene? AWT, Swing, JavaFX & SWT 7
H Ich kann MouseDragged nicht abfangen AWT, Swing, JavaFX & SWT 3
R JLayeredPane - Drag&Drop - mouseDragged AWT, Swing, JavaFX & SWT 6
J mouseDragged und MouseMotionListener AWT, Swing, JavaFX & SWT 3
G Scrollen per mouseDragged (JScrollPane) AWT, Swing, JavaFX & SWT 8
H MouseMotionListener#mouseDragged() in großen Abständen AWT, Swing, JavaFX & SWT 7
M gezeichnete Punkte dynamisch verschieben mit mousedragged AWT, Swing, JavaFX & SWT 4
P JDialog mit mouseDragged(), verschieben ? AWT, Swing, JavaFX & SWT 14
M JavaFX Mandelbrot-bild noch nicht optimiert AWT, Swing, JavaFX & SWT 7
berserkerdq2 Wie füge ich ein Bild in javafx mit dem Scenebuilder ein, das automatisch mitgezogen wird, wenn das Fenster vergrößert wird oder Vollbildmodus AWT, Swing, JavaFX & SWT 6
frager2345 Bild aus Dateien lesen und als Hintergrund verwenden AWT, Swing, JavaFX & SWT 2
T Bild in ein graphics füllen AWT, Swing, JavaFX & SWT 2
N imageIcon zeigt kein Bild an AWT, Swing, JavaFX & SWT 5
B Bild lädt nicht AWT, Swing, JavaFX & SWT 2
izoards Bild ausdrucken - PageFormat setzen geht nicht AWT, Swing, JavaFX & SWT 5
M Bild wird nicht geladen obwohl sie gefunden wird AWT, Swing, JavaFX & SWT 0
V JavaFX Bild leer und keine Fehlermeldung AWT, Swing, JavaFX & SWT 21
D JavaFX Bearbeitetes Bild wird nicht gespeichert AWT, Swing, JavaFX & SWT 9
D JavaFX Größe des Bild an ImageView anpassen AWT, Swing, JavaFX & SWT 3
M Bewegtes Bild im BorderLayout.CENTER AWT, Swing, JavaFX & SWT 6
C Falschfarbenbild (lineare Grauwertspreizung)aus Grauwert-Bild erstellen AWT, Swing, JavaFX & SWT 15
C Kleineres Bild an bestimmte Koordinaten setzen AWT, Swing, JavaFX & SWT 6
S Bild neu skalieren - Bild in Bild speichern? AWT, Swing, JavaFX & SWT 6
N Bild Drehen AWT, Swing, JavaFX & SWT 1
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
J Bild von anderer Klasse will nicht laden AWT, Swing, JavaFX & SWT 1
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
T JFrame Bild einfügen AWT, Swing, JavaFX & SWT 9
M Combobox bild anklicken AWT, Swing, JavaFX & SWT 2
cool_brivk24 Swing ImageIcon lädt kein Bild AWT, Swing, JavaFX & SWT 12
L Bild nicht in der Mitte AWT, Swing, JavaFX & SWT 16
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
J Swing Bild in Button AWT, Swing, JavaFX & SWT 11
I Bild über FXML (ImageView, Image) anzeigen AWT, Swing, JavaFX & SWT 1
T Image Loader lädt Bild nicht AWT, Swing, JavaFX & SWT 10
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
T JavaFX Bild in Tabellenzelle AWT, Swing, JavaFX & SWT 2
Ksanatos Swing Bild (.jpg) einlesen und per Button wechseln AWT, Swing, JavaFX & SWT 9
S JPanel rotieren, Bild ist abgeschnitten, Clipping? AWT, Swing, JavaFX & SWT 0
MaxG. Swing Bild Button AWT, Swing, JavaFX & SWT 7
P Swing Bild Skallieren AWT, Swing, JavaFX & SWT 1
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
A Swing Bild wird nicht mehr geladen AWT, Swing, JavaFX & SWT 4
A Swing Gemaltes Bild über saveDialog speichern unter AWT, Swing, JavaFX & SWT 15
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
S Bild mit ImageIcon auf GUI verkleinern AWT, Swing, JavaFX & SWT 3
T AWT Farben in einem Bild ändern AWT, Swing, JavaFX & SWT 8
I JFrame Bild strecken und auf Bildschirmgröße anpassen AWT, Swing, JavaFX & SWT 2
F Gezeichnetes als bild speichern AWT, Swing, JavaFX & SWT 4
B 2D-Grafik Bild farblich filtern AWT, Swing, JavaFX & SWT 2
B JavaFX ImageView neues Bild zuweisen AWT, Swing, JavaFX & SWT 19
A 2D-Grafik Bild wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 24
K Bild in JFrame AWT, Swing, JavaFX & SWT 2
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
B Swing Unterteiltes JFrame mit Bild in der Mitte AWT, Swing, JavaFX & SWT 4
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
M JavaFX Ein Bild ohne Rahmen fällt runter? AWT, Swing, JavaFX & SWT 2
G Anonyme Instanz von JXImageView erstellen und mit Bild initialisieren AWT, Swing, JavaFX & SWT 7
A JPanel Bild laden (Porblem mit Dateipfad) AWT, Swing, JavaFX & SWT 2
M JavaFX - Bild in Jar einbinden, sodass es auch außerhalb der IDE geladen wird. AWT, Swing, JavaFX & SWT 2
M Bild Beschreibung mit ImageIO speichern AWT, Swing, JavaFX & SWT 1
M "ImageIO.read()" liest Bild nicht richtig ein AWT, Swing, JavaFX & SWT 3
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
K Bild in Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
C GUI öfters durchlaufen und hinterher Bild speichern AWT, Swing, JavaFX & SWT 1
M AWT Farben in Bild ersetzen AWT, Swing, JavaFX & SWT 11
E JavaFX Bild einfügen AWT, Swing, JavaFX & SWT 6
G paintComponents zerstückelt Bild AWT, Swing, JavaFX & SWT 0
C 2D Grafik ein Bild soll permanent durchlaufen AWT, Swing, JavaFX & SWT 2
1 Textfield: jede Buchstabe ein Bild AWT, Swing, JavaFX & SWT 2
C Bild Koordinaten AWT, Swing, JavaFX & SWT 6
M Bild aus JLabel resizen und speichern AWT, Swing, JavaFX & SWT 0
M Bild in JPanel mit Maus einfügen AWT, Swing, JavaFX & SWT 0
B JPanel und png-Bild AWT, Swing, JavaFX & SWT 2
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
O 2D-Grafik Bild abgeschnitten nach Rotation mit Affine Transform und Hintergrund Schwarz AWT, Swing, JavaFX & SWT 8
A Swing Malprogramm Bild speichern? AWT, Swing, JavaFX & SWT 9
U Bild innerhalb hatml code anzeigen AWT, Swing, JavaFX & SWT 5
Y JavaFX Bild speichern und Pfad dazu abspeichern AWT, Swing, JavaFX & SWT 2
S Geladenes Bild wird nicht in JPanel angezeigt AWT, Swing, JavaFX & SWT 7
L 2D-Grafik Bild in Richtung Maus drehen AWT, Swing, JavaFX & SWT 18
C Bild in JFrame AWT, Swing, JavaFX & SWT 8
T AWT Bild laden und transparent zeichnen AWT, Swing, JavaFX & SWT 2
I SWT Bilder, bzw. ein einzelnes Bild AWT, Swing, JavaFX & SWT 6
L JavaFX: Bild in Image einlesen AWT, Swing, JavaFX & SWT 11
T Mit getSubimage ruckelt das Bild AWT, Swing, JavaFX & SWT 7
T Bild drehen ohne Resize AWT, Swing, JavaFX & SWT 3
A Bild in JLabel skalieren AWT, Swing, JavaFX & SWT 4
A Bild über Imageviewer auf GUI anzeigen AWT, Swing, JavaFX & SWT 3
D 3D-Grafik [JOGL] streifen im bild AWT, Swing, JavaFX & SWT 2
D Bild bewegen mit Tastendruck AWT, Swing, JavaFX & SWT 7
H Bild wird nicht angezeigt, Fehlercode unverständlich AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben