2009-09-18 11 views
1

Je dois écrire une applet, dans le côté gauche je dois utiliser un panneau pour contenir une liste de véhicules qui peuvent être une liste de boutons, quel est le problème, le nombre de véhicules ne sont pas donnés! !! donc, je dois faire défiler le panneau lorsque le nombre de véhicules est trop,jscrollpane pour faire défiler un panneau

Je le fais pour JFrame, mais il ne fonctionne pas correctement avec le panneau, s'il vous plaît aidez-moi un exemple

le code i utilise au panneau de défilement est:

public class VehicleList extends JPanel { 
    private ArrayList<VehicleReport> vehicles; 
    private ArrayList<JButton> v_buttons = new ArrayList<JButton>(); 



public void showList(ArrayList<Vehicles> vehicles) 
{ 
    this.vehicles = vehicles; 
    //... 
    add(getScrollpane()); 
    setSize(155,300); 

} 

public JScrollPane getScrollpane() 
{ 
    JPanel panel = new JPanel(); 
    panel.setPreferredSize(new DimensionUIResource(150, 300)); 
    GridBagLayout gridbag = new GridBagLayout(); 
    GridBagConstraints constraint = new GridBagConstraints(); 
    panel.setLayout(gridbag); 
    constraint.fill = GridBagConstraints.HORIZONTAL; 
    JLabel title = new JLabel("Vehiles list"); 
    constraint.gridwidth = 2; 
    constraint.gridx = 0; 
    constraint.gridy = 0; 
    constraint.ipady = 230; 
    gridbag.setConstraints(title, constraint); 
    panel.add(title); 
    // end of set title 
    constraint.gridwidth = 1; 
    int i=1; 

    for(JButton jb : v_buttons) 
    { 
     constraint.gridx =0; 
     constraint.gridy = i; 
     gridbag.setConstraints(jb, constraint); 
     panel.add(jb); 
     JLabel vehicle_lable = new JLabel("car" + i); 
     constraint.gridx = 1; 
     constraint.gridy = i; 
     gridbag.setConstraints(vehicle_lable, constraint); 
     panel.add(vehicle_lable); 
     i++; 
    } 
JScrollPane jsp = new JScrollPane(panel); 
return jsp; 

}

}

à jaframe ajouter après JScrollPane à Jframe je place cette

pack();

setSize (250, 250);

setLocation (100, 300);

et cela fonctionne clairement !!!!

+0

pouvez-vous fournir le code que vous avez déjà? – akf

+0

Salut, je le place maintenant, merci pour votre attention ... – sirvan

Répondre

2

Vous ne nous montrez pas non plus le gestionnaire de disposition de VehicleList JPanel. Si vous ne le définissez pas, FlowLayout est utilisé par défaut, contrairement à JFrame (dont vous avez mentionné le fonctionnement), dont le volet de contenu est par défaut BorderLayout. Alors peut-être que vous avez juste besoin de changer le code correspondant de:

//... 
add(getScrollpane()); 

à

//... 
setLayout(new BorderLayout()); 
add(getScrollpane(), BorderLayout.CENTER); 
+0

merci un million ... c'est vrai !!! – sirvan

1

Vous devez définir la stratégie de défilement à l'horizontale et verticale:

public void setHorizontalScrollBarPolicy(int policy) 
public void setVerticalScrollBarPolicy(int policy) 

utilisant:

JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED 
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER 
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS 

Et:

JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED 
JScrollPane.VERTICAL_SCROLLBAR_NEVER 
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS 

Ainsi, par exemple:

jscrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
+1

(VERTICAL | HORIZONTAL) _AS_NEEDED sont les valeurs par défaut – Nate

+0

Lorsque j'ai posté la réponse il n'y avait pas de code d'échantillon, donc je pensais qu'il avait peut-être mis les valeurs accidentellement ... –

Questions connexes