2010-02-21 15 views
2

Je souhaite utiliser un JScrollPane pour un panneau contenant une liste arbitraire d'étiquettes à l'aide de la disposition des boîtes. J'essaie de l'obtenir pour que la barre de défilement apparaisse s'il y avait trop d'éléments (étiquettes) à afficher.JScrollPane pour un panneau contenant un ensemble d'étiquettes avec BoxLayout

J'ai essayé d'ajouter un JScrollPane au panneau, puis d'ajouter les étiquettes, mais je ne vois aucune barre de défilement.

Des idées?

TIA

Répondre

1

Pour ce genre de chose, vous utilisez normalement un JList ou JTable (si vous avez besoin rendu personnalisé).

+0

Oui, je le pouvais. Je considère ceci. Dans mon cas, il s'agit d'un jeu orienté sur le clavier, c'est donc un peu plus de code à implémenter avec une liste sur un ensemble d'étiquettes. Mais tu as raison. Je pourrais le faire de cette façon. – sproketboy

1

Assurez-vous d'appeler validate() ou revalidate() sur le JScrollPane après avoir ajouté un élément, pour forcer le recalcul de la taille de panneau souhaitée.

+0

Ça n'a pas l'air de marcher pour moi. Voir ci-dessous. – sproketboy

0

Voici comment je l'ai fait.

JPanel midPanel = new JPanel(); 
midPanel.setLayout(new BoxLayout(midPanel, BoxLayout.Y_AXIS)); 
midPanel.add(new JLabel("<html><u>Label</u>")); 
Box box = Box.createVerticalBox(); 
for (Item item : data.getInventory()) { 
    inventory.add(box.add(new JLabel(item.getName()))); 
} 

JScrollPane jscrlpBox = new JScrollPane(box); 
midPanel.add(jscrlpBox); 
add(midPanel, BorderLayout.CENTER); 

De:

http://www.java2s.com/Code/Java/Swing-JFC/JScrollPanetoholdscrollablecomponent.htm

0

Avez-vous pas oublier de définir la taille préférée du panneau de contenu?

final JFrame frame = new JFrame("Scroll Demo"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setLayout(new BorderLayout()); 

    final Box textArea = Box.createVerticalBox(); 
    final JScrollPane textAreaScroll = new JScrollPane(textArea); 
    textAreaScroll.setPreferredSize(new Dimension(80,150)); /* essential! */ 
    JButton addButton = new JButton("ADD"); 
    addButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      textArea.add(new JLabel("abc")); 
      textArea.revalidate(); 
     } 
    }); 

    frame.getContentPane().add(textAreaScroll, BorderLayout.SOUTH); 
    frame.getContentPane().add(Box.createRigidArea(new Dimension(10,10)), BorderLayout.CENTER); 
    frame.getContentPane().add(addButton, BorderLayout.NORTH); 

    frame.pack(); 
    frame.setVisible(true); 

Dans cet exemple, la barre de défilement fonctionne correctement, mais si vous supprimez la ligne marquée comme « essentiel », il ne fonctionnera plus.