Java jscrollpane以滚动面板

Java jscrollpane以滚动面板,java,user-interface,swing,applet,awt,Java,User Interface,Swing,Applet,Awt,我必须写一个小程序,在左边我必须使用一个面板来包含一个车辆列表,可以是一个按钮列表,有什么问题,车辆的数量没有给出!!! 所以,当车辆数量太多时,我需要滚动面板 我这样做是为了jframe,但它在面板上无法正常工作,请帮我举个例子 我用于滚动面板的代码是: public class VehicleList extends JPanel { private ArrayList<VehicleReport> vehicles; private ArrayList<

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

我这样做是为了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;
公共类车辆列表扩展了JPanel{
私人ArrayList车辆;
私有ArrayList v_按钮=新建ArrayList();
公共无效显示列表(ArrayList车辆)
{
这是指车辆;
//...
添加(getScrollpane());
设置大小(155300);
}
公共JScrollPane getScrollpane()
{
JPanel面板=新的JPanel();
panel.setPreferredSize(新维度UIResource(150300));
GridBagLayout gridbag=新的GridBagLayout();
GridBagConstraints constraint=新的GridBagConstraints();
面板设置布局(网格袋);
constraint.fill=gridbagsconstraints.HORIZONTAL;
JLabel title=新JLabel(“车辆列表”);
constraint.gridwidth=2;
constraint.gridx=0;
constraint.gridy=0;
constraint.ipady=230;
设置约束(标题、约束);
小组.添加(标题);
//标题集结束
constraint.gridwidth=1;
int i=1;
用于(JButton jb:v_按钮)
{
constraint.gridx=0;
constraint.gridy=i;
setConstraints(jb,constraint);
面板。添加(jb);
JLabel车辆标签=新JLabel(“车辆”+i);
constraint.gridx=1;
constraint.gridy=i;
gridbag.setConstraints(车辆标签、约束);
面板。添加(车辆标签);
i++;
}
JScrollPane jsp=新的JScrollPane(面板);
返回jsp;
}

}

在将jscrollpane添加到jframe之后的jaframe中,我放置此

包装()

设置大小(250250)

设置位置(100300)


而且它工作得很清楚

您需要在水平和垂直方向上设置滚动策略:

public void setHorizontalScrollBarPolicy(int policy)
public void setVerticalScrollBarPolicy(int policy)
使用:

JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS 
以及:

例如:

jscrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

您也没有向我们显示VehicleList JPanel的布局管理器。如果您没有设置它,它默认为FlowLayout,而不像JFrame(您提到过它确实可以工作),它的内容窗格默认为BorderLayout。因此,您可能只需要更改以下相关代码:

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


你能提供你已经有的代码吗?嗨,我现在把它放好了,谢谢你的关注…(垂直|水平)因为你需要的是默认值当我发布答案时,没有示例代码,所以我想可能是他无意中设置了值。。。
//...
add(getScrollpane());
//...
setLayout(new BorderLayout());
add(getScrollpane(), BorderLayout.CENTER);