如何在Java中使用JScrollPane

时间:2012-03-21 21:15:38

标签: java swing scroll jscrollpane

如何在下面给出的代码中获取我的JList组件的滚动?它似乎无法正常工作:(

 public class JButtonO extends JFrame{

String[] values = {"henry", "Michael","Uche","John","Ullan","Nelly",
                              "Ime","Lekan","Austine","jussi","Ossi","Imam","Empo","Austine","Becky",
                             "Scholar","Ruth", "Anny"};

 public JButtonO()
{
   super("the button");
   this.setSize(400,200);
   JPanel panel =  new JPanel();
   JLabel label = new JLabel("Output Items:");
   label.setAlignmentX(1);
   label.setAlignmentY(1);
   JList conList = new JList(values);
   conList.setVisibleRowCount(3);
   JScrollPane scroller = new JScrollPane(conList);
   panel.add(label);
   panel.add(scroller);
   panel.add(conList);

   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   this.add(panel);
   this.setVisible(true);


}

3 个答案:

答案 0 :(得分:4)

将包含JList scroller的JScrollPane conList添加到JPanel panel就足够了。 错误是你第二次添加JList。

   JScrollPane scroller = new JScrollPane(conList);
   panel.add(label);
   panel.add(scroller);
   panel.add(conList); // <---THIS LINE SHOULD BE DELETED...

答案 1 :(得分:2)

看,我可能没有回答你需要的东西,因为我不记得很多摆动布局。我很久以前不和它一起工作......

但是在JPanel上删除设置布局(我记得),它可以使用以下代码:

public JButtonO() {
    super("the button");
    this.setSize(400, 200);

    // Create a panel with a borderlayout
    JPanel jpanel = new JPanel(new BorderLayout());

    JLabel label = new JLabel("Output Items:");
    label.setAlignmentX(1);
    label.setAlignmentY(1);
    // Add Label to top of layout
    jpanel.add(label, BorderLayout.NORTH);

    JList conList = new JList(values);
    conList.setVisibleRowCount(3);
    JScrollPane scroller = new JScrollPane(conList);
    //AddScroll to center
    jpanel.add(scroller);

    //Add Panel to JFrame
    this.add(jpanel);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);

  }

我认为问题是JPanel的默认布局。由于它的工作原理,你的卷轴没有“收缩”到足以创建卷轴......

希望它有所帮助,即使没有太多解释......

实际上:在我发布答案后,我看到了你的错误。现在我可以解释什么是错的。您已经在JScrollPane中添加了JList:

JScrollPane scroller = new JScrollPane(conList);

但之后你把它放在JPanel里面了:

panel.add(conList);

这将更改您将显示JList的位置,并让JScroll再次为空。没有组件,它将显示大小为0x0,不会绘制(即使在那里)。

现在我想我帮了= D

答案 2 :(得分:2)

JScrollPane具有称为滚动条策略的设置,用于说明何时显示滚动条。您可以使用JScrolPane(Component,int,int)构造函数设置它们,也可以通过调用setVerticalScrollBarPolicy()setHorizontalScrollBarPolicy()来设置它们。默认策略是“根据需要”,这意味着仅当组件太大而无法显示整体时才会显示滚动条。因此,如果您的列表适合窗口内部,则滚动条将不可见,但在您例如使用鼠标缩小窗口。您可以使用相应的常量将一个或两个策略更改为“always”,以使滚动条始终可见(如果这是您需要的。)