随机产生多个JCheckBox,并在选择是时。获取jcheckbox的文本

package com.guan;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
 * 此类是当swing界面上有多个随机的JCheckBox时,当选中多个JCheckbox时,怎么样获取选择的JCheckbox文本,当取消
 * JCheckbox时,怎么去掉他的文本
 * 还有一个收获就是swing布局上的:当父面板是流式布局的时候(FlowLayout),如果子面板是网格布局时候,网格的上下左右的间距
 * 能够变得比较小。这对我来说是一个新的发现,以后如果做swing的小程序,就可以尝试在布局中嵌套各种布局,说不定会有新的见解。
 * 这个发现拓宽的我的思路。
 *
 * @author windpower3
 *
 */
public class MutiCheckBoxFrm extends JFrame implements ActionListener, ItemListener {
    private static Insets insets1 = new Insets(5, 5, 5, 5);
    private JPanel refreshPanel;
    private JScrollPane scrollPane,scrollPane1;
    private JPanel centerPanel;
    private String[] str = new String[] { "好汉", "韩浩", "李四", "张三丰", "王五", "礼拜",
            "杜荣", "六号", "馒头", "网易", "百度", "新浪", "腾讯", "样衣", "赵武", "孔明", "耶稣",
            "小林", "小红", "小子", "牛逼", "牛皮", "牛犊子", "射雕", "无锡", "张无忌", "赵敏",
            "周芷若", "张三丰小", "赵二娃", "桂花", "狗娃", "铁蛋", "扫风", "无名", "无缝", "小和",
            "荷花", "雨花", "才华", "丁香花", "牡丹花", "太阳花", "茉莉花", "俊华", "赵志敬", "一直跑",
            "尹志平", "白眉", "描线", "喵喵", "旺财", "旺旺", "狗剩", "小强 ", "小五", "选吗 ", "看看" };
    private JTextArea jta;

    public MutiCheckBoxFrm() {

        this.setSize(800, 600);
        this.setLocation(200, 100);
        this.setLayout(new GridLayout(2, 1));
        scrollPane = new JScrollPane();
        centerPanel = new JPanel();
        scrollPane.setViewportView(centerPanel);
        jta = new JTextArea();
        scrollPane1=new JScrollPane();
        scrollPane1.setViewportView(jta);
//        jta.setCaretPosition(jta.getText().length());
        jta.setLineWrap(true);
        scrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        jta.setEditable(false);
        jta.setFont(new Font("宋体", Font.PLAIN, 17));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        init();
        this.add(scrollPane);
        this.add(scrollPane1);
        this.setVisible(true);
    }
    private void init() {
        centerPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
        refreshPanel = new JPanel();
        // refreshPanel.setSize(centerPanel.WIDTH, 200);
        refreshPanel.setLayout(new GridLayout(0, 10));// new GridBagLayout()
        Random r = new Random();
        System.out.println(str.length);
        int num = r.nextInt(str.length);
        System.out.println("num==" + num);
        for (int i = 0; i < num; i++) {
            JCheckBox jcb = new JCheckBox(str[i]);
            jcb.addActionListener(this);
            jcb.addItemListener(this);
            jcb.setSize(80, 25);
            refreshPanel.add(jcb);
            // addComponent(refreshPanel, jcb, i, j, 1, 1,
            // GridBagConstraints.CENTER, GridBagConstraints.BOTH);
        }
        centerPanel.add(refreshPanel);

    }

    public static void addComponent(Container container, Component component,
            int gridx, int gridy, int gridwidth, int gridheight, int anchor,
            int fill) {
        GridBagConstraints gbc = new GridBagConstraints(gridx, gridy,
                gridwidth, gridheight, 1.0, 1.0, anchor, fill, insets1, 0, 0);// 建立网格包对象
        container.add(component, gbc);// 添加到容器中
    }

    public static void main(String[] args) {
        new MutiCheckBoxFrm();
    }

    @Override
    public void actionPerformed(ActionEvent e) {

    }

    @Override
    public void itemStateChanged(ItemEvent e) {
        //swing中多个checkbox的选择,点击checkbox,
        //就将他的文本存储到一个文本域中,如果取消他,就他的文本在文本域中消除,前提是checkbox的文本不能重复
        JCheckBox jCheckBox;
        jCheckBox = (JCheckBox) e.getSource();
        String names = this.jta.getText();
        String name = jCheckBox.getText();
        if (jCheckBox.isSelected()) {
            if (names == null || "".equals(names)) {
                // List<String>
                // names=Arrays.asList(this.jta.getText().split(","));
                this.jta.setText(name);
            } else {
                // List<String>
                // names=Arrays.asList(this.jta.getText().split(","));
                if (!names.contains(name)) {
                    String value = this.jta.getText();
                    value = value + "," + name;
                    this.jta.setText(value);
                }
            }
            // if(){}
            // this.jta.setText(t);
        } else {
            if (names == null || "".equals(names)) {
                this.jta.setText("");
            } else {
                if (names.contains(name)) {
                    String[] strArr = names.split(",");
                    int length = strArr.length;
                    System.out.println("length:" + length);
                    if(length==1){
                        System.out.println("只有一个");
                        if(strArr[0].equals(name)){
                            System.out.println("去掉了");
                            this.jta.setText("");
                        }
                        else{
                            this.jta.setText(strArr[0]);
                        }
                    }else{
                        String[] minStrs = new String[length - 1];
                        int mi = 0;
                        for (int i = 0; i < strArr.length; i++) {
                            if (!name.equals(strArr[i])) {
                                minStrs[mi] = strArr[i];
                                mi++;
                            }
                        }
                        String result = "";
                        for (int i = 0; i < minStrs.length; i++) {
                            if (i == minStrs.length - 1) {
                                result = result + minStrs[i];
                            } else {
                                result = result + minStrs[i] + ",";
                            }
                        }
                        this.jta.setText(result);
                    }
                }
            }
        }
    }
}

原文地址:https://www.cnblogs.com/gwq369/p/5418258.html