1

我必须编写一个小程序,在左侧我必须使用一个面板来包含一个可以是按钮列表的车辆列表,有什么问题,车辆数量没有给出!所以,当车辆数量太多时,我需要滚动面板,

我为 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;

}

}

在将 jscrollpane 添加到 jframe 之后,在 jaframe 中我放置了这个

盒();

设置大小(250、250);

设置位置(100、300);

而且效果很明显!!!!

4

2 回答 2

2

您也没有向我们展示 VehicleList JPanel 的布局管理器。如果您没有设置它,它默认为 FlowLayout,不像 JFrame(您提到它确实适用),其内容窗格默认为 BorderLayout。因此,也许您只需要从以下位置更改相关代码:

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

//...
setLayout(new BorderLayout());
add(getScrollpane(), BorderLayout.CENTER);
于 2009-09-18T17:54:41.007 回答
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);
于 2009-09-18T17:34:29.987 回答