我使用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);
如果有人遇到类似的问题我会更新。
答案 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
。