简体   繁体   English

如何设置JCheckBox以使用JScrollPane?

[英]How to set JCheckBox to use JScrollPane?

I want to make JCheckBox List to use arraylist into this left side JScrollPane. 我想让JCheckBox List可以在左侧的JScrollPane中使用arraylist。 But This JScrollPane just paste and add the last index JCheckBox. 但是,此JScrollPane仅粘贴并添加最后一个索引JCheckBox。 Any moment just don't make me solve this problem. 任何时候都不要让我解决这个问题。 Do I add JList? 是否添加JList? I want to solve this as quickly as I can. 我想尽快解决这个问题。 Here is my Code. 这是我的代码。

package dimi.voca;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.util.ArrayList;
import javax.swing.JCheckBox;
import javax.swing.ScrollPaneConstants;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.ScrollPane;
import java.awt.event.ActionEvent;
import javax.swing.JTextArea;
import javax.swing.Box;
import javax.swing.JList;

public class LearnSelect extends JFrame
{
    public LearnSelect() {
        super("DimiVoca in PC");

        JPanel panel = new JPanel();
        setSize(650, 500);

        getContentPane().setLayout(null);

        JScrollPane scrollPane = new JScrollPane();

        JList list = new JList();
        panel.add(list);

        scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane.setToolTipText("");
        scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane.setBounds(28, 10, 200, 441);
        getContentPane().add(scrollPane);

        ArrayList<JCheckBox> Day = new ArrayList<JCheckBox>();
        String label[] = {  "Day 1", "Day 2", "Day 3", "Day 4", "Day 5", "Day 6",
                            "Day 7", "Day 8", "Day 9", "Day 10", "Day 11", "Day 12",
                            "Day 13", "Day 14", "Day 15", "Day 16", "Day 17", "Day 18", 
                            "Day 19", "Day 20", "Day 21", "Day 22", "Day 23", "Day 24", 
                            "Day 25", "Day 26", "Day 27", "Day 28", "Day 29", "Day 30", 
                            "Day 31", "Day 32", "Day 33", "Day 34", "Day 35", "Day 36", 
                            "Day 37", "Day 38", "Day 39", "Day 40", "Day 41", "Day 42", 
                            "Day 43", "Day 44", "Day 45", "Day 46", "Day 47", "Day 48", 
                            "Day 49", "Day 50", "Day 51", "Day 52", "Day 53", "Day 54", 
                            "Day 55", "Day 56", "Day 57", "Day 58", "Day 59", "Day 60"};
        for(int i = 0; i <= label.length - 1; i++)
        {
            JCheckBox checkbox = new JCheckBox(label[i]);
            Day.add(checkbox);
            scrollPane.setViewportView(checkbox);
        }

        JScrollPane scrollPane_1 = new JScrollPane();
        scrollPane_1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
        scrollPane_1.setToolTipText("");
        scrollPane_1.setBounds(227, 10, 200, 441);
        getContentPane().add(scrollPane_1);

        JButton close = new JButton("\uB2EB\uAE30");
        close.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) 
            {
                dispose();
            }
        });
        close.setBounds(481, 428, 97, 23);
        getContentPane().add(close);

        JButton start = new JButton("\uC2DC\uC791");
        start.setBounds(481, 395, 97, 23);
        getContentPane().add(start);

        JCheckBox isRandom = new JCheckBox("\uB79C\uB364 \uD5C8\uC6A9");
        isRandom.setBounds(481, 100, 145, 23);
        getContentPane().add(isRandom);

        JCheckBox loadCreate = new JCheckBox("Create\uC5D0\uC11C \uBC1B\uC544\uC624\uAE30");
        loadCreate.setBounds(481, 150, 145, 23);
        getContentPane().add(loadCreate);

        setVisible(true);
    }
}

In your for loop, you're setting your scrollpane's viewport view to the last JCheckBox, and it will be the only one seen. 在for循环中,您将滚动窗格的视口视图设置为最后一个JCheckBox,它将是唯一看到的视图。 If you want all the JCheckBoxes seen within the scrollpane, then create a JPanel before the for loop, give it a GridLayout, and add your JCheckBoxes to this single JPanel inside the for loop. 如果要在滚动窗格中看到所有JCheckBox,请在for循环之前创建一个JPanel,为其提供GridLayout,然后将JCheckBoxes添加到for循环内的单个JPanel中。 Then add that JPanel to the JScrollPane's viewport view. 然后将该JPanel添加到JScrollPane的视口视图中。

JPanel dayPanel = new JPanel(new GridLayout(0, 1)); // !!

ArrayList<JCheckBox> Day = new ArrayList<JCheckBox>();
String label[] = { "Day 1", "Day 2", "Day 3", "Day 4", "Day 5", "Day 6", "Day 7", "Day 8",
        "Day 9", "Day 10", "Day 11", "Day 12", "Day 13", "Day 14", "Day 15", "Day 16",
        "Day 17", "Day 18", "Day 19", "Day 20", "Day 21", "Day 22", "Day 23", "Day 24",
        "Day 25", "Day 26", "Day 27", "Day 28", "Day 29", "Day 30", "Day 31", "Day 32",
        "Day 33", "Day 34", "Day 35", "Day 36", "Day 37", "Day 38", "Day 39", "Day 40",
        "Day 41", "Day 42", "Day 43", "Day 44", "Day 45", "Day 46", "Day 47", "Day 48",
        "Day 49", "Day 50", "Day 51", "Day 52", "Day 53", "Day 54", "Day 55", "Day 56",
        "Day 57", "Day 58", "Day 59", "Day 60" };
for (int i = 0; i <= label.length - 1; i++) {
    JCheckBox checkbox = new JCheckBox(label[i]);
    Day.add(checkbox);
    // !! scrollPane.setViewportView(checkbox);
    dayPanel.add(checkbox);  // !!
}

scrollPane.setViewportView(dayPanel);  // !!

Another problem is here: 另一个问题在这里:

getContentPane().setLayout(null);

While null layouts and setBounds() might seem to Swing newbies like the easiest and best way to create complex GUI's, the more Swing GUI'S you create the more serious difficulties you will run into when using them. 尽管null布局和setBounds()似乎是Swing新手喜欢创建复杂GUI的最简单和最佳方法,但您创建的Swing GUI越多,使用它们时将遇到的困难就越大。 They won't resize your components when the GUI resizes, they are a pain to enhance or maintain, they fail completely when placed in scrollpanes, they look gawd-awful when viewed on all platforms or screen resolutions that are different from the original one. 当GUI调整大小时,它们不会调整您的组件大小;它们是增强或维护时的痛苦;放置在滚动窗格中时,它们会完全失败;在与原始平台不同的所有平台或屏幕分辨率上查看时,它们看起来像是一团糟。

You will want to learn about the layout managers and use them. 您将要了解并使用布局管理器。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM