Hallo liebe Leute,
heute habe ich wieder eine Frage was das Jscrollpane betrifft:
Und zwar habe ich ein bufferedImage, das ich auf jpanel zeichne, und anschließend mit mousewheel zoome. Alles klappt wunderbar, nur das scrollpane, in dem das jpanel befindet, wird dabei nicht angepasst. d.h. nach dem vergrößern des bildes kann ich mit dem scrollpane nicht bis zu den Rändern des gezoomten Bildes scrollen!
Ich hoffe ihr könnt mir auf die Sprünge helfen
Hier der Code:
P.S: das bild wird aus dem inhalt eines Tabs erstellt, aber ich denke so wichtig ist das nicht.
heute habe ich wieder eine Frage was das Jscrollpane betrifft:
Und zwar habe ich ein bufferedImage, das ich auf jpanel zeichne, und anschließend mit mousewheel zoome. Alles klappt wunderbar, nur das scrollpane, in dem das jpanel befindet, wird dabei nicht angepasst. d.h. nach dem vergrößern des bildes kann ich mit dem scrollpane nicht bis zu den Rändern des gezoomten Bildes scrollen!
Ich hoffe ihr könnt mir auf die Sprünge helfen
Hier der Code:
Java:
package ListenerClasses;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
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.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;
public class GraphEditListener1 extends JPanel implements ActionListener, MouseWheelListener,MouseMotionListener,MouseListener {
JTabbedPane pane ;
JPanel hostPanel;
JScrollPane scrollPane;
BufferedImage originalImage;
AffineTransform at = new AffineTransform();
double scale = 1.0;
private Rectangle rect;
Point point;
public GraphEditListener1(JTabbedPane pane){
this.pane=pane;
this.addMouseWheelListener(this);
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
public void actionPerformed(ActionEvent e) {
originalImage = generateBufferedImageFromComponent(pane.getSelectedComponent()
.getComponentAt(1, 1).getComponentAt(1, 1));
setPreferredSize(new Dimension(originalImage.getWidth(),originalImage.getHeight()));
JFrame frame = new JFrame("Editierungsframe");
frame.setSize(600,400);
scrollPane = new JScrollPane();
scrollPane.setSize(originalImage.getWidth(),originalImage.getHeight());
scrollPane.setViewportView(this);
hostPanel = new JPanel(new BorderLayout());
hostPanel.add(scrollPane,BorderLayout.CENTER);
frame.getContentPane().add(hostPanel);
frame.setVisible(true);
}
private BufferedImage generateBufferedImageFromComponent(Component component) {
BufferedImage image = new BufferedImage(component.getWidth(), component
.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
g.setColor(component.getBackground());
g.fillRect(0, 0, image.getWidth(), image.getHeight());
component.print(g);
g.dispose();
return image;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
if (originalImage!=null){
g2.drawImage(originalImage, at, null);
}
}
public void mouseWheelMoved(MouseWheelEvent e) {
if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL){
scale += (.1 * e.getWheelRotation());
scale = Math.max(0.1, scale);
Point p = e.getPoint();
at = AffineTransform.getTranslateInstance(p.getX(), p.getY());
at.scale(scale, scale);
at.translate(-p.getX(), -p.getY());
revalidate();
}
}
@Override
public void mouseDragged(MouseEvent e) {
rect.setLocation(rect.x + (point.x - e.getX()), rect.y + (point.y - e.getY()));
this.scrollRectToVisible(rect);
}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
rect = this.getVisibleRect();
point = e.getPoint();
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
P.S: das bild wird aus dem inhalt eines Tabs erstellt, aber ich denke so wichtig ist das nicht.