2009-11-06 11 views
3

j'ai ce petit programme pour montrer des images sur apanel .. mais je ne suis pas en mesure d'ajouter un parchemin à lui .. et ceci est mon codeAjouter JScrollPane à un panneau qui montre une image

la classe étend JPanel pour afficher l'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; 

}

et un échantillon du cadre principal qui a un autre panneau appelé imageContainer pour maintenir le panneau montrant:

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); 


} 

alors quelle est l'erreur que j'ai faite ici?

Répondre

6

Les barres de défilement apparaissent automatiquement lorsque le taille préférée du composant ajouté au panneau de défilement dépasse la taille du volet de défilement. Votre panneau personnalisé n'a pas de taille préférée, de sorte que les barres de défilement n'apparaissent jamais. Une solution consiste simplement à retourner une taille préférée égale à la taille de l'image.

Bien sûr, je ne comprends jamais pourquoi les gens se donnent la peine de faire ce type de peinture personnalisée. Il n'y a pas besoin d'une classe personnalisée. Créez simplement un ImageIcon à partir du BufferedImage, puis ajoutez l'icône à un JLable, puis ajoutez l'étiquette au scrollpane et vous n'aurez aucun de ces problèmes. La seule raison de faire de la peinture personnalisée est si vous avez besoin de mettre à l'échelle l'image ou fournir un autre effet de fantaisie.

+0

merci .. eh bien je vais aussi faire scalnig et ather des choses sur l'image – CiCi

+0

mais même la mise à l'échelle peut être gérée juste en remplaçant la méthode "peinture" sur le JLabel – aperkins

1

Puisque le 'conteneur imag' est la classe ajoutée à votre panneau déroulant, c'est le panneau qui doit dépasser une certaine taille pour rendre les choses défilables. Vous devez placer le 'showPanel' directement dans un conteneur compressible.

+0

alors est-il juste de faire le code comme ça? JScrollPane scroller = nouveau JScrollPane (showPanel); scroller.setPreferredSize (nouvelle dimension (image.getWidth(), image.getHeight())); imageContainer.add (showPanel); mais je suis encore gettig rien même l'image ne montre pas !! – CiCi