2009-09-18 4 views
1

Мне нужно написать апплет, в левой части я должен использовать панель, чтобы содержать список транспортных средств, которые могут быть списком кнопок, в чем проблема, количество автомобилей не указано! !! так, мне нужно прокрутка панели, когда количество транспортных средств слишком много,jscrollpane для прокрутки панели

я делаю это для JFrame, но он не работает правильно с панелью, пожалуйста, помогите мне пример

кода, который я использовать для прокрутки панели является:

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 после добавления JScrollPane в JFrame я разместить эту

pack();

setSize (250, 250);

setLocation (100, 300);

и он работает ясно !!!!

+0

вы можете предоставить код, который у вас есть уже? – akf

+0

привет, я разместил его сейчас, спасибо за внимание ... – sirvan

ответ

2

Вы также не показываете нам диспетчер компоновки VehicleList JPanel. В случае, если вы не устанавливаете его, по умолчанию используется FlowLayout, в отличие от JFrame (о котором вы упомянули, что это работает), в области содержимого которого по умолчанию используется BorderLayout. Так что, может быть, вам просто нужно изменить соответствующий код из:

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

в

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

спасибо миллион ... это правильно !!! – sirvan

1

Вам нужно установить скроллинг политику по горизонтали и по вертикали:

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

Использование:

JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED 
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER 
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS 

И:

JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED 
JScrollPane.VERTICAL_SCROLLBAR_NEVER 
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS 

Так, например:

jscrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 
+1

(VERTICAL | HORIZONTAL) _AS_NEEDED являются значениями по умолчанию – Nate

+0

Когда я отправил ответ, не было образца кода, поэтому я подумал, что он случайно установил значения ... –

Смежные вопросы