Hallo zusammen,
ich hab' auf einem Panel gezeichnet und möchte mit dem Mausrad scrollen bzw. zoomen (Strg-Mausrad).
Leider funktioniert das Ganze nur zeitweise:
- Vergrößere ich die Zeichnung bis zur oberen Begrenzung (scale=15), verschwinden zwischendurch die Scrollbalken.
- Verkleinere ich die Zeichnung wieder bis zur unteren Begrenzung (scale=1), verschwinden die Scrollbalken wieder -zumindestens zeitweise.
- Vergrößere ich die Zeichnung wieder - ist nach scale=8 das Bild verschwunden und nichts geht mehr.
Leider verstehe ich nicht , warum das so ist.
Hier nun mein Quelltext:
Vielen Dank für eure Hilfe,
Petra
ich hab' auf einem Panel gezeichnet und möchte mit dem Mausrad scrollen bzw. zoomen (Strg-Mausrad).
Leider funktioniert das Ganze nur zeitweise:
- Vergrößere ich die Zeichnung bis zur oberen Begrenzung (scale=15), verschwinden zwischendurch die Scrollbalken.
- Verkleinere ich die Zeichnung wieder bis zur unteren Begrenzung (scale=1), verschwinden die Scrollbalken wieder -zumindestens zeitweise.
- Vergrößere ich die Zeichnung wieder - ist nach scale=8 das Bild verschwunden und nichts geht mehr.
Leider verstehe ich nicht , warum das so ist.
Hier nun mein Quelltext:
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseWheelEvent;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class ScrollAndZoomExample {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DrawingPanel myPanel=new DrawingPanel();
JScrollPane scrollPane=new JScrollPane();
scrollPane.getViewport().setView(myPanel);
scrollPane.getHorizontalScrollBar().setUnitIncrement(25);
scrollPane.getVerticalScrollBar().setUnitIncrement(25);
f.getContentPane().setLayout(new BorderLayout());
f.getContentPane().add(scrollPane,BorderLayout.CENTER);
f.setSize(400, 400);
f.setLocation(200,200);
f.setVisible(true);
}
}
class DrawingPanel extends JPanel{
int scale;
public DrawingPanel(){
scale= 1;
setPreferredSize(new Dimension(100,100));
addMouseWheelListener(new java.awt.event.MouseWheelListener() {
@Override
public void mouseWheelMoved(MouseWheelEvent evt) {
if (evt.isControlDown()) {
scale=(scale-evt.getWheelRotation());
if (scale<1) scale=1;
else if (scale>15) scale=15;
//System.out.println(scale);
setPreferredSize(new Dimension(getPreferredSize().width*scale,getPreferredSize().height*scale));
revalidate();
repaint();
}
else{
evt.getComponent().getParent().dispatchEvent(evt);
}
}
});
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
g2.scale(scale,scale);
g2.draw(new Ellipse2D.Double(10, 10, 20, 20));
g2.draw(new Ellipse2D.Double(10, 10, 40, 40));
g2.draw(new Ellipse2D.Double(10, 10, 60, 60));
}
}
Vielen Dank für eure Hilfe,
Petra