在复选框组java swing中选择多个复选框
我正在开发一个Jframe netbeans IDE,基本上我以这样的形式拖放东西,我想在一个框架中创建一组复选框至少两组,每组都有许多复选框,我想在每个组中选择多个复选框,并返回复选框的值,我读到按钮组在这种情况下不适用,因为按钮组将只有一个选择。任何关于如何做到这一点的代码片段或想法都非常感谢 更新 发现示例这是我希望我的复选框的行为方式,只是我不想将它们放在表中,而且netbeans IDE中没有表组件,我可以为此拖动任何关于如何执行此操作的想法都非常感谢,我同意垃圾桶,JTable可能是一个很好的开始,另一个选择是自己滚动 每个列都是它自己的组件,允许您选择多个选项,但只能在该组的上下文中选择在复选框组java swing中选择多个复选框,java,swing,checkbox,Java,Swing,Checkbox,我正在开发一个Jframe netbeans IDE,基本上我以这样的形式拖放东西,我想在一个框架中创建一组复选框至少两组,每组都有许多复选框,我想在每个组中选择多个复选框,并返回复选框的值,我读到按钮组在这种情况下不适用,因为按钮组将只有一个选择。任何关于如何做到这一点的代码片段或想法都非常感谢 更新 发现示例这是我希望我的复选框的行为方式,只是我不想将它们放在表中,而且netbeans IDE中没有表组件,我可以为此拖动任何关于如何执行此操作的想法都非常感谢,我同意垃圾桶,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;
}
}
}
}
它不会返回所选项目的列表,但在复选框列表中进行迭代、检查项目是否被选中会有多困难,提取文本并将其添加到另一个列表并返回结果…?一个框架中至少有两个组,每个组都有许多复选框-创建一个带有标题边框的JPanel,并将复选框添加到面板中。然后将面板添加到框架中。重复第二组复选框。或使用JTable,对于。@camickr我的问题是如何在一个可以选择或选中多个复选框的组中设置复选框,并且我可以从该组中获取带有复选框的项目。我将按照您的说法检查列表并选择选中的项目,然后将其放入另一个列表中。关于此问题,先生。先生。我还有一件事要澄清我应该更改为什么属性使方向水平我是说列表要并排哪一个?这两个列表并列?我应该在哪里检查复选框的选中状态?如果您想知道复选框何时选中/取消选中,请使用ActionListener