jscrollpane для прокрутки панели - PullRequest
       12

jscrollpane для прокрутки панели

1 голос
/ 18 сентября 2009

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

я делаю это для 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 я помещаю это

упаковка ();

setSize (250, 250);

setLocation (100, 300);

и работает четко !!!!

Ответы [ 2 ]

2 голосов
/ 18 сентября 2009

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

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

до

//...
setLayout(new BorderLayout());
add(getScrollpane(), BorderLayout.CENTER);
1 голос
/ 18 сентября 2009

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

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