Java JButton+AbstractAction重置一堆JCheckBox-Swing

Java JButton+AbstractAction重置一堆JCheckBox-Swing,java,swing,jbutton,jcheckbox,Java,Swing,Jbutton,Jcheckbox,我正在创建一个带有一个JButton和一些jcheckbox的工具栏,以隐藏或显示JTable中的列 JButton的主要用途是单击后将工具栏中的所有其他JCheckBox重置为全部选中或全部未选中。事实上,我假装一次重置被点击,以检查所有这些 我可以创建并放置它们,这里没有问题 我的问题是如何在单击JButton时重置工具栏中的所有JCheckBox 这是我的代码,我在这里创建它们并添加操作 创建ArrayList类字段。 填写forint i=0;i

我正在创建一个带有一个JButton和一些jcheckbox的工具栏,以隐藏或显示JTable中的列

JButton的主要用途是单击后将工具栏中的所有其他JCheckBox重置为全部选中或全部未选中。事实上,我假装一次重置被点击,以检查所有这些

我可以创建并放置它们,这里没有问题

我的问题是如何在单击JButton时重置工具栏中的所有JCheckBox

这是我的代码,我在这里创建它们并添加操作

创建ArrayList类字段。 填写forint i=0;i 尝试在工具栏顶部组件上迭代,询问每个组件是否是JCheckBox的实例。如果是,请将selected设置为true:

下面是一个完整的测试:

import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;

public class Demo {

    private void initGUI(){

        final JToolBar toolBarTop = new JToolBar();
        toolBarTop.add(new JCheckBox("Check 1"));
        toolBarTop.add(new JCheckBox("Check 2"));
        toolBarTop.add(new JCheckBox("Check 3"));

        JButton reset = new JButton("Reset");
        reset.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                for(Component c : toolBarTop.getComponents()){
                    if(c instanceof JCheckBox){
                        JCheckBox checkBox = (JCheckBox) c;
                        checkBox.setSelected(true);
                    }
                }
            }
        });

        toolBarTop.add(reset);

        JPanel content = new JPanel(new FlowLayout());
        content.setPreferredSize(new Dimension(300, 200));
        content.add(toolBarTop);

        JFrame frame = new JFrame("Demo");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setContentPane(content);       
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    }


    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Demo().initGUI();
            }
        });
    }    

}

我还是很困惑-你被困在哪里了?您的代码在哪里?您尝试在JCheckbox集合中进行迭代,因为它们肯定存在于某种集合中,例如ArrayList?对于您的第一个问题:我一直在想在哪里以及如何向JButton添加某种操作来重置JCheckbox。你的第二个问题,我不确定我是否理解正确,但是for循环的目的是创建X数量的jcheckbox,这个X数量作为这个方法的参数,createTableClass c,List data,boolean toolBarUp,boolean toolBarBottom,ArrayList labelsCheckBoxI可以很容易地做到这一点,如果JCheckbox的变量仅与在JButton AbstractAction上使用checkBox.setSelectedtrue相关,但这样一来,JCheckbox就“即时”以匿名方式创建,我不知道如何使用setSelectedtrue或等效方法。@dwnz:这就是问题所在。不要这样创造它们。将它们存储在JButton侦听器可以迭代的集合中。
JButton reset = new JButton("Reset");
    reset.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            for(Component c : toolBarTop.getComponents()){
                if(c instanceof JCheckBox){
                    JCheckBox checkBox = (JCheckBox) c;
                    checkBox.setSelected(true);
                }
            }
        }
    });
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.SwingUtilities;

public class Demo {

    private void initGUI(){

        final JToolBar toolBarTop = new JToolBar();
        toolBarTop.add(new JCheckBox("Check 1"));
        toolBarTop.add(new JCheckBox("Check 2"));
        toolBarTop.add(new JCheckBox("Check 3"));

        JButton reset = new JButton("Reset");
        reset.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                for(Component c : toolBarTop.getComponents()){
                    if(c instanceof JCheckBox){
                        JCheckBox checkBox = (JCheckBox) c;
                        checkBox.setSelected(true);
                    }
                }
            }
        });

        toolBarTop.add(reset);

        JPanel content = new JPanel(new FlowLayout());
        content.setPreferredSize(new Dimension(300, 200));
        content.add(toolBarTop);

        JFrame frame = new JFrame("Demo");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setContentPane(content);       
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

    }


    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Demo().initGUI();
            }
        });
    }    

}