滚动没有发生在我的Jlists中

时间:2015-03-26 14:14:29

标签: java swing jscrollpane jlist windowbuilder

我使用windowbuilder创建一个应该是联系人列表的GUI。有两个列表:一个是联系人,另一个是数字。当您选择联系人时,他的号码将会出现。 但是,当我添加大量联系人时,滚动条不会自动显示,就像它对我的朋友一样,所以我尝试添加一个JScrollPane。仍然无效。

这是什么:

    DefaultListModel contact = new DefaultListModel();  
    JList contacts = new JList(contact);
    contacts.setBounds(22, 64, 186, 135);

    contentPane.add(contacts);

这是我试过的:

    DefaultListModel contact = new DefaultListModel();  
    JList contacts = new JList(contact);
    contacts.setBounds(22, 64, 186, 135);
    JScrollPane scrollPane1 = new JScrollPane(contacts);


    contentPane.add(contacts);
    contentPane.add(scrollPane1, BorderLayout.WEST);

然后我也尝试了addind Bounds到scrollPanel:

    DefaultListModel contact = new DefaultListModel();  
    JList contacts = new JList(contact);
    contacts.setBounds(22, 64, 186, 135);
    JScrollPane scrollPane1 = new JScrollPane(contacts);
    scrollPane1.setBounds(22, 64, 186, 135);


    contentPane.add(contacts);
    contentPane.add(scrollPane1, BorderLayout.WEST);

当我删除'contacts.setBounds(22,64,186,135);'时,列表停止工作。

我也试过没有最后一行,我只尝试了最后一行而没有第二行,我尝试添加“scrollPane1.setViewportView(contacts);”,我试图取走“BorderLayout.WEST”所有其他尝试的论据,所以我基本上尝试了我可以在互联网上找到的“解决方案”的每个组合

我不知道发生了什么,我不知道如何解决它。我想要的只是通过滚动来查看我的所有联系人。

编辑,已解决:

问题是我的面板被声明为contentPane.setLayout(null);因此“BorderLayout.WEST”是不必要的。此外,边界应该应用于滚动窗格,而不是列表。最后,我不应该使用添加(联系人)到面板。解决方案是:

    DefaultListModel contact = new DefaultListModel();  
    JList contacts = new JList(contact);        
    JScrollPane scrollPaneContact = new JScrollPane(contacts);
    scrollPaneContact.setBounds(22, 64, 186, 135);
    contentPane.add(scrollPaneContact);

如果有人遇到类似的问题我会更新。

2 个答案:

答案 0 :(得分:1)

您需要使用适当的构造函数设置JScrollPane的策略。

  

JScrollPane(组件视图,int vsbPolicy,int hsbPolicy)   创建一个JScrollPane,在视口中显示视图组件,其视图位置可以通过一对滚动条控制。

例如:

   new JScrollPane(COMPONENT, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

编辑:

 DefaultListModel model = new DefaultListModel();  
    JList contactsList = new JList(model);
    JScrollPane scrollPane1 = new JScrollPane(contactsList, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

答案 1 :(得分:1)

JScrollPane scrollPane1 = new JScrollPane(contacts);
//contentPane.add(contacts); // get rid of this
contentPane.add(scrollPane1, BorderLayout.WEST);

首先,将联系人JList添加到滚动窗格的视口中,这是正确的。

但是你直接将联系人添加到框架中,这是错误的。组件只能有一个父组件。通过将联系人JList添加到框架中,可以将其从滚动窗格中删除。

此外,不要使用null布局,也不要使用setBounds(...)。 Swing旨在与Layout Managers一起使用。

如果您需要更多帮助,请发布展示问题的正确SSCCE。每个问题都应包括SSCCE