Reputation: 47
i have this little program for showing images on apanel.. but i'm not able to add a scroll to it.. and this is my code
the class that extends jpanel to show the image:
public class ShowPanel extends JPanel{
public ShowPanel(BufferedImage image, int height, int width) {
this.image = image;
this.height = height;
this.width = width;
//this.setBounds(width, width, width, height);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, height, width, null);
}
public void setImage(BufferedImage image, int height, int width) {
this.image = image;
this.height = height;
this.width = width;
}
private BufferedImage image;
private int height;
private int width;
}
and a sample of the main Frame that has another panel called imageContainer to hold the showing panel:
public class MainFrame extends javax.swing.JFrame {
/** Creates new form MainFrame */
public MainFrame() {
initComponents();
image = null;
path = "PantherOnLadder.gif";
image = Actions.loadImage(path);
showPanel = new ShowPanel(image, 0, 0);
spY = toolBar.getY() + toolBar.getHeight();
showPanel.setBounds(0, spY, image.getWidth(), image.getHeight());
showPanel.repaint();
imageContainer.add(showPanel);
JScrollPane scroller = new JScrollPane(imageContainer);
scroller.setAutoscrolls(true);
}
so what's the mistake i did here ?
Upvotes: 3
Views: 7608
Reputation: 324207
The scrollbars appear automatically when the preferred size of the component added to the scrollpane exceeds the size of the scroll pane. Your custom panel doesn't have a preferred size so the scrollbars never appear. One solution is to just return a preferred size equal to the size of the image.
Of course I never understand why people go to all the trouble to do this type of custom painting. There is no need for a custom class. Just create an ImageIcon from the BufferedImage and then add the Icon to a JLable and then add the label to the scrollpane and you won't have any of these problems. The only reason to do custom painting is if you need to scale the image or provide some other fancy effect.
Upvotes: 6
Reputation: 3042
Since the 'imagecontainer' is the class being added to your scrollable panel, that is the panel which needs to exceed a certain size to make things scrollable. You should place the 'showPanel' directly into a scollable container.
Upvotes: 1