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
Bei den Interfaces habe ich was ausprobiert mit e.getX usw aber ich weiß nicht wie ich das in der Berechnung mit einbinden kann.
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.