我有一个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?
答案 0 :(得分:6)
列表已包含在滚动窗格内,因此您不能将列表添加到主面板。只有滚动窗格。
你做错的另一件事是不使用a layout manager,并设置组件的边界和大小。不要那样做。让布局管理器为您定位和调整组件大小。
最后,您不应该使用主线程中的Swing组件。仅限于event dispatch thread。
这是您的代码的修改版本,工作正常。我删除了背景颜色,因为这应该由L& F处理:
public class Checkboxlistener extends JFrame {
private JPanel jpAcc = new JPanel();
private JList<String> checkBoxesJList;
Checkboxlistener() {
jpAcc.setLayout(new BorderLayout());
String labels[] = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" };
checkBoxesJList = new JList<String>(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);
}
});
}
}
答案 1 :(得分:0)
如前所述,该列表已经添加到JScrollPane
中,因此无需再次添加。另外,为了使滚动工作,它需要定义列表方法setVisibleRowCount(int)
。我已经在CheckBoxListener
方法中修改了上面的代码以使其正常工作。
Checkboxlistener()
{
setSize(1300, 600);
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);
checkBoxesJList.setVisibleRowCount(5);
JScrollPane scrollPane = new JScrollPane(checkBoxesJList);
jpAcc.add(scrollPane);
add(jpAcc);
setVisible(true);
}