将Jlist添加到JScrollPane

问题描述 投票:2回答:2

我有一个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,我在做什么错?

java swing jscrollpane jlist
2个回答
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);
            }
        });
    }
}

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);

}
© www.soinside.com 2019 - 2024. All rights reserved.