【问题标题】:How to make list of JCheckBoxes and put it into JScrollPane如何制作 JCheckBoxes 列表并将其放入 JScrollPane
【发布时间】:2016-11-02 22:17:25
【问题描述】:

我正在尝试制作一些 JCheckBoxes 列表并将其放在滚动窗格中。

我尝试制作复选框数组并将其放入 JList 中,然后放入 JScrollPane 中,但它仅从方法中打印有关复选框的一些信息。

我想实现这样的目标:

这是我目前的代码:

public class MainFrame extends JFrame
{
private JPanel panel = new JPanel();
private JScrollPane scroll;

public MainFrame()
{
    add();
    setTitle("Dropable checkbox");
    setSize(500, 500);

    add(panel);

    setVisible(true);
}

private void add()
{
    String categories[] = { "Household", "Office", "Extended Family",
            "Company (US)", "Company (World)", "Team", "Will",
            "Birthday Card List", "High School", "Country", "Continent",
            "Planet","KITA" };

    JPanel p = new JPanel();
    BoxLayout layout = new BoxLayout(p, BoxLayout.Y_AXIS);
    p.setLayout(layout);

    for (String string : categories) {
        p.add(new JCheckBox(string));
    }

    JScrollPane scroll = new JScrollPane(p);
    panel.add(scroll);
}

}

这就是我的屏幕现在的样子

【问题讨论】:

  • 将复选框放在面板中。将面板放在滚动窗格中。
  • 我用 Y_layout 制作了一个面板,将所有复选框放入其中,然后将该面板放入 ScrollPane。当我将该滚动窗格放入面板,然后将面板放入框架时,它不显示滚动条。但是当我将滚动窗格直接放在框架上时,它会显示滚动条。如何在面板中获取滚动条?
  • scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_​​ALWAYS);可能有助于显示滚动条
  • 为什么不使用单列 JTable 和合适的渲染器和编辑器?

标签: java swing jscrollpane jcheckbox


【解决方案1】:

您应该将您的变量和方法重命名为 Java 标准,因为您自己似乎很困惑。

例如,您要创建 2 次滚动面板(一次在顶部,一次在底部)。也不需要面板p。此外,您不会按照应该创建的方式创建滚动窗格。

我创建了一个工作程序,但我使用MigLayout,因为我不太了解BoxLayout,但你应该明白这一点并理解如何创建滚动窗格的重要部分。

public class MainFrame extends JFrame {
    private JPanel panel = new JPanel();
    JScrollPane scroll = new JScrollPane();

    public MainFrame() {
        createUI();
        setTitle("Dropable checkbox");
        setSize(300, 400);
        setVisible(true);
    }

    private void createUI() {
        String categories[] = { "Household", "Office", "Extended Family", "Company (US)", "Company (World)", "Team",
                "Will", "Birthday Card List", "High School", "Country", "Continent", "Planet", "KITA" };

        setLayout(new MigLayout());
        panel.setLayout(new MigLayout("wrap 1"));

        for (String string : categories) {
            panel.add(new JCheckBox(string));
        }
        scroll.setViewportView(panel);
        add(scroll);
    }

    public static void main(String[] args) {
        MainFrame mf = new MainFrame();
        mf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mf.setLocationRelativeTo(null);
    }
}

【讨论】:

  • JTable 只有一列,没有 JTableHeader :-)
  • @mKorbel:是的,trashgod 提出了这个想法,我也觉得它更好。但是由于在垃圾神指出这一点后 OP 没有包含其组件的用途,我继续并展示了带有滚动窗格和复选框的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 2021-07-02
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多