2016-09-06 1 views
1

Comme le titre le suggère, je veux peindre sur un JPanel et l'afficher dans un JScrollpane, donc si le contenu de JPanel est grand, les barres de défilement sont affichées. J'ai essayé d'y arriver par:Peindre sur un JPanel et l'ajouter à un JScrollPane

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 

public class Main extends JFrame{ 

DrawPanel dp; 
JScrollPane jsp; 

public Main(){ 
    setTitle("Test"); 
    setSize(400,400); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    dp = new DrawPanel(); 
    jsp = new JScrollPane(dp); 
    getContentPane().add(jsp); 
} 

public class DrawPanel extends JPanel{ 

    @Override 
    protected void paintComponent(Graphics grphcs) { 
     super.paintComponent(grphcs); 
     Graphics2D g2d = (Graphics2D) grphcs; 
     g2d.drawString("..long text....long text....long text....long text....long text....long text....long text....long text..", 10, 20); 
    } 

} 

public static void main(String[] args) { 
    new Main().setVisible(true); 
} 

} 

Current Output

Sortie prévue: Une fenêtre avec le long texte et barre de défilement horizontale.

J'ai également essayé de surcharger la méthode getPreferredSize (comme le suggèrent certaines réponses dans d'autres questions) mais cela ne semble pas fonctionner. Aussi, quelqu'un peut-il expliquer pourquoi les barres de défilement apparaissent (en utilisant jscrollpane) quand il y a des étiquettes ou des boutons dans un panneau qui est ajouté au jscrollpane, mais la même chose ne fonctionne pas dans le cas ci-dessus? Toute aide sera très appréciée.

+0

Vous devez redimensionner le jpanel. – matt

+0

J'ai essayé cela aussi en surchargeant la méthode setSize dans le DrawPanel, j'ai eu la sortie suivante: [link] (http://imgur.com/a/28xTW) –

Répondre

0

Vous pouvez redimensionner un JPanel en définissant le (s) format (s) ou en les remplaçant.

Dimension d = new Dimension(800, 800); 
    dp.setMinimumSize(d); 
    dp.setMaximumSize(d); 
    dp.setPreferredSize(d); 

Des barres de défilement apparaissent lorsque je fais cela.

+0

Je ne sais pas pourquoi je n'ai jamais pensé à régler le min et taille maximale. Merci, ça fonctionne. –

+0

Oui, il y a beaucoup de façons différentes de dimensionner les composants, cela peut être un peu déroutant de savoir lesquels fonctionnent et où. – matt