Hallo,
Momentan bin ich dabei ein Java-Programm, welches von "Haus aus" nur mit Scrollbar zu scrollen ist, mit einem Touchscrollen auszustatten.
Und da ja die Finger- bzw. Stiftberührungen im Prinzip auch nur Mauseingaben sind, habe ich das ganze mit MouseListener bzw. eher mit MouseMotionListener programmiert.
An sich funktioniert das Programm gut, nur leider finde ich keine Lösung für mein Problem, welcher sich auf das scrollen bezieht.
Die Scrollbars springen automatisch zu dem Punkt, wo sich das MouseEvent befindet, was sie aber nicht tun sollen.
Die Scrollbars sollten sich um den Punkt "drehen".
Das heißt: Wenn ich auf Punkt 340|480 klicke, soll sich der aktuelle "Bildschirm" um den Punkt drehen.
Das Hintergrundbild, über welches gescrollt werden soll, befindet sich im Anhang.
Aber am besten ihr benutzt ein Bild von euch, da ich dieses hier kleiner skalieren musste, damit es überhaupt hochgeladen werden konnte.
Hauptsache ist, dass der Sinn klar wird.
Nun folgt der Java-Code:
Momentan bin ich dabei ein Java-Programm, welches von "Haus aus" nur mit Scrollbar zu scrollen ist, mit einem Touchscrollen auszustatten.
Und da ja die Finger- bzw. Stiftberührungen im Prinzip auch nur Mauseingaben sind, habe ich das ganze mit MouseListener bzw. eher mit MouseMotionListener programmiert.
An sich funktioniert das Programm gut, nur leider finde ich keine Lösung für mein Problem, welcher sich auf das scrollen bezieht.
Die Scrollbars springen automatisch zu dem Punkt, wo sich das MouseEvent befindet, was sie aber nicht tun sollen.
Die Scrollbars sollten sich um den Punkt "drehen".
Das heißt: Wenn ich auf Punkt 340|480 klicke, soll sich der aktuelle "Bildschirm" um den Punkt drehen.
Das Hintergrundbild, über welches gescrollt werden soll, befindet sich im Anhang.
Aber am besten ihr benutzt ein Bild von euch, da ich dieses hier kleiner skalieren musste, damit es überhaupt hochgeladen werden konnte.
Hauptsache ist, dass der Sinn klar wird.
Nun folgt der Java-Code:
Java:
import java.awt.event.AdjustmentListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.awt.Container;
import java.awt.Color;
import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.ImageIcon;
import javax.imageio.ImageIO;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.File;
public class OPPJ_Up
extends JApplet
{
public JScrollPane jsp; //Scrollfeld
public JScrollBar hBar; //horizonzale Scrollbar
public JScrollBar vBar; //vertikale Scrollbar
public JLabel jlbx;
public JLabel jlby;
public BufferedImage image; //Das gepufferte Bild für den Hintergrund
public ImageIcon icon; //Das gepufferte Bild in einem ImageIcon, um das Bild scrollbar zu machen
public AdjustmentListener hListener;
public AdjustmentListener vListener;
public int ZielX = 0;
public int ZielY = 0;
public void init() //Dieser Teil des Applets wird beim Start initialisiert
{
setSize(600,600);
//Nun folgt eine Try-Catch-Klausel,in welcher das Bild
//eingelesen wird und anschließend in die Methode für das Zeichnen
//übergeben wird.
//Sofern Fehler auftreten, wird die Fehlermeldung in das DOS-Fenster
//übergeben.
try
{
this.image = ImageIO.read(new File("01_Hauptebene.jpg"));
}
catch(IOException e){System.err.println(e.toString());}
icon = new ImageIcon(image);
//Nun wird der Container für das Applet initialisiert
Container cp = getContentPane();
//Hier wird das JLabel für die X-Achse initialisiert und der Text des Labels gesetzt
//Zusätzlich die Location und die Size
jlbx = new JLabel("X-Achse: ");
jlbx.setLocation(450,10);
jlbx.setSize(200,10);
jlbx.setForeground(Color.red);
cp.add(jlbx);
//Hier wird das JLabel für die Y-Achse initialisiert und der Text des Labels gesetzt
//Zusätzlich die Location und die Size
jlby = new JLabel("Y-Achse: ");
jlby.setLocation(450,25);
jlby.setSize(200,10);
jlby.setForeground(Color.red);
cp.add(jlby);
//Hier wird die ScrollPane, welches für das
//scrollen des Bildes zuständig ist, initialisiert
jsp = new JScrollPane(new JLabel(icon));
//Im Folgenden wird der AdjustmentListener
//für die horizontale Scrollbar initialisiert
hListener = new AdjustmentListener()
{
public void adjustmentValueChanged(AdjustmentEvent e)
{
jlbx.setVisible(false);jlbx.setVisible(true);
jlby.setVisible(false);jlby.setVisible(true);
}
};
//Jetzt wird die horizontale Scrollbar initialisiert
//Und anschließend der AdjustmentListener hinzugefügt
hBar = jsp.getHorizontalScrollBar();
hBar.addAdjustmentListener(hListener);
//Im Folgenden wird der AdjustmentListener
//für die vertikale Scrollbar initialisiert
vListener = new AdjustmentListener()
{
public void adjustmentValueChanged(AdjustmentEvent e)
{
jlbx.setVisible(false);jlbx.setVisible(true);
jlby.setVisible(false);jlby.setVisible(true);
}
};
//Jetzt wird die vertikale Scrollbar initialisiert
//Und anschließend der AdjustmentListener hinzugefügt
vBar = jsp.getVerticalScrollBar();
vBar.addAdjustmentListener(vListener);
jsp.addMouseListener(new MyMouseListener());
jsp.addMouseMotionListener(new MyMouseMotionListener());
//Nun wird die ScrollPane an den Container hinzugefügt
cp.add(jsp);
}
int yWert = 0;
int xWert = 0;
int i = 0;
public int speichern(int yWert)
{
return yWert;
}
public class MyMouseListener
implements MouseListener
{
public void mousePressed(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
System.out.println(yWert);
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseExited(MouseEvent e)
{
}
public void mouseClicked(MouseEvent e)
{
}
}
public class MyMouseMotionListener
implements MouseMotionListener
{
public void mouseMoved(MouseEvent e)
{
}
public void mouseDragged(MouseEvent e)
{
jlbx.setText("X-Achse: "+e.getX());
jlby.setText("Y-Achse: "+e.getY());
if(i == 0)
{
yWert = e.getY()-ZielY;
xWert = e.getX()-ZielX;
i++;
}
else
{
yWert = e.getY();
xWert = e.getX();
}
//System.out.println("\n"+e.getY()+"//"+ZielY);
//System.out.println("\n"+e.getX()+"//"+ZielX);
if(getHeight() - ZielY > e.getY()-ZielY)
{
//System.out.println("Momentaner Bereich, von Y:"+ZielY+" :"+yWert);
vBar.setValue(yWert);
yWert = vBar.getValue();
}
if(getWidth() - ZielX > e.getX()-ZielX)
{
//System.out.println("Momentaner Bereich, von X:"+ZielX+" :"+xWert);
hBar.setValue(xWert);
xWert = hBar.getValue();
}
}
}
} //Ende von: public class OPPJ_Up