将Jlist添加到JScrollPane

我有一个JList,我需要放在滚动窗格内,因为我从数据库中获取JList,值可以大大增加。 我需要能够将它们向下滚动,所以我写道:

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.ListSelectionModel; public class Checkboxlistener extends JFrame { private JPanel jpAcc = new JPanel(); private JList checkBoxesJList; Checkboxlistener() { // super("Deposit base", false, true, false, true); setSize(1300, 600); jpAcc.setLayout(null); jpAcc.setBackground(Color.LIGHT_GRAY); String labels[] = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"}; checkBoxesJList = new JList(labels); checkBoxesJList.setBounds(10, 30, 80, 600); checkBoxesJList.setBackground(Color.LIGHT_GRAY); checkBoxesJList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); JScrollPane scrollPane = new JScrollPane(checkBoxesJList); jpAcc.add(checkBoxesJList); jpAcc.add(scrollPane); getContentPane().add(jpAcc); setVisible(true); } public static void main(String args[]) { Checkboxlistener cbl = new Checkboxlistener(); } } 

我做错了什么因为我没有看到任何ScrollPane?

该列表已包含在滚动窗格内,因此您不能将列表添加到主面板。 只有滚动窗格。

你做错的另一件事是不使用布局管理器 ,并设置组件的边界和大小。 不要那样做。 让布局管理器为您定位和调整组件的大小。

最后,您不应该使用主线程中的Swing组件。 仅在事件派发线程中 。

这是您的代码的修改版本,工作正常。 我删除了背景颜色,因为这应该由L&F处理:

 public class Checkboxlistener extends JFrame { private JPanel jpAcc = new JPanel(); private JList checkBoxesJList; Checkboxlistener() { jpAcc.setLayout(new BorderLayout()); String labels[] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" }; checkBoxesJList = new JList(labels); checkBoxesJList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); JScrollPane scrollPane = new JScrollPane(checkBoxesJList); jpAcc.add(scrollPane); getContentPane().add(jpAcc); pack(); } public static void main(String args[]) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { Checkboxlistener cbl = new Checkboxlistener(); cbl.setVisible(true); } }); } }