【问题标题】:select many Checkbox in a checkboxgroup java swing在复选框组java swing中选择多个复选框
【发布时间】:2015-01-24 14:24:06
【问题描述】:

我正在处理Jframe netbeans IDE 基本上我以我想在一个框架中制作一组checkboxes 至少两个组并且每个组有很多checkboxes 我想选择多个checkbox 在每个组中并返回我读过的复选框的值,按钮组在这种情况下不适用,因为按钮组只有一个选择。非常感谢任何有关如何执行此操作的代码 sn-p 或想法。

UPDATE

找到this 示例,这就是我希望我的复选框的行为方式,只是我不想将它们放在表中,而且 netbeans IDE 中没有表组件,我可以为此拖动任何关于如何执行此操作的想法很多赞赏

【问题讨论】:

  • at least two groups in one frame and each group has many checkboxes - 创建一个带有TitledBorder 的JPanel 并将复选框添加到面板中。然后将面板添加到框架中。对第二组复选框重复此操作。
  • 或者使用JTable,代表example
  • @camickr 我的问题是如何在一个可以选择或选中多个复选框的组中制作复选框,我可以从该组中获取带有检查的项目

标签: java swing checkbox


【解决方案1】:

我同意 Trashgod 的观点,JTable 可能是一个不错的起点,另一种选择是自己动手...

每个“列”都是它自己的组件,允许您选择多个选项,但仅限于该“组”的上下文中

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.LayoutManager;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.Scrollable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

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

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new GridLayout(0, 2));
                frame.add(new CheckBoxGroup(new String[]{"Bananas", "Oranages", "Apples", "Pears"}));
                frame.add(new CheckBoxGroup(new String[]{"Learn Archery", "Float in the dead sea", "Swing with a whale shark", "Sail the greek islands", "Go skydiving", "Dance in the rain", "Cycle through the Netherlands"}));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class CheckBoxGroup extends JPanel {

        private JCheckBox all;
        private List<JCheckBox> checkBoxes;

        public CheckBoxGroup(String... options) {
            checkBoxes = new ArrayList<>(25);
            setLayout(new BorderLayout());
            JPanel header = new JPanel(new FlowLayout(FlowLayout.LEFT, 1, 1));
            all = new JCheckBox("Select All...");
            all.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    for (JCheckBox cb : checkBoxes) {
                        cb.setSelected(all.isSelected());
                    }
                }
            });
            header.add(all);
            add(header, BorderLayout.NORTH);

            JPanel content = new ScrollablePane(new GridBagLayout());
            content.setBackground(UIManager.getColor("List.background"));
            if (options.length > 0) {

                GridBagConstraints gbc = new GridBagConstraints();
                gbc.gridwidth = GridBagConstraints.REMAINDER;
                gbc.anchor = GridBagConstraints.NORTHWEST;
                gbc.weightx = 1;
                for (int index = 0; index < options.length - 1; index++) {
                    JCheckBox cb = new JCheckBox(options[index]);
                    cb.setOpaque(false);
                    checkBoxes.add(cb);
                    content.add(cb, gbc);
                }

                JCheckBox cb = new JCheckBox(options[options.length - 1]);
                cb.setOpaque(false);
                checkBoxes.add(cb);
                gbc.weighty = 1;
                content.add(cb, gbc);

            }

            add(new JScrollPane(content));
        }

        public class ScrollablePane extends JPanel implements Scrollable {

            public ScrollablePane(LayoutManager layout) {
                super(layout);
            }

            public ScrollablePane() {
            }

            @Override
            public Dimension getPreferredScrollableViewportSize() {
                return new Dimension(100, 100);
            }

            @Override
            public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
                return 32;
            }

            @Override
            public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
                return 32;
            }

            @Override
            public boolean getScrollableTracksViewportWidth() {
                boolean track = false;
                Container parent = getParent();
                if (parent instanceof JViewport) {
                    JViewport vp = (JViewport) parent;
                    track = vp.getWidth() > getPreferredSize().width;
                }
                return track;
            }

            @Override
            public boolean getScrollableTracksViewportHeight() {
                boolean track = false;
                Container parent = getParent();
                if (parent instanceof JViewport) {
                    JViewport vp = (JViewport) parent;
                    track = vp.getHeight() > getPreferredSize().height;
                }
                return track;
            }

        }

    }

}

它没有做的是返回一个选定项目的列表,但是迭代 checkBoxes List 有多难,检查项目是否被选中,提取它的文本并添加将其发送给另一个List 并返回结果...?

【讨论】:

  • 我会照你说的做,我会检查清单并选择选中的项目并将其放入另一个清单中,先生,请回到您身边。。
  • 先生,我还有一件事要澄清我应该改变什么属性以使方向水平我的意思是列表并排
  • 哪一个?这两个列表是并排的?
  • 我应该在哪里检查复选框选中状态?
  • 如果您想知道复选框何时被选中/取消选中,请使用ActionListener
猜你喜欢
  • 2023-04-08
  • 2014-10-07
  • 2012-12-22
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多