JButton + AbstractAction重置了一堆JCheckBox(s) - Swing

时间:2013-10-10 21:43:18

标签: java swing jbutton jcheckbox

我正在创建一个ToolBar,其中包含一个JButton和一些JCheckBox来隐藏或显示JTable中的列。

JButton主要目的是在点击后将JCheckBox中的所有其他ToolBar重置为全部已选中或全部未选中。实际上我假装一旦点击重置就检查所有这些。

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

我的问题是如何点击JButton来重置ToolBar中的所有JCheckBox。

这是我的代码,我在其中创建并添加Action

        final JToolBar toolBarTop = new JToolBar();

        // The Reset Button
        toolBarTop.add(new JButton(new AbstractAction("Reset") {
            @Override
            public void actionPerformed(ActionEvent e) {
            columnModel.setAllColumnsVisible();
            }   
        }));

        // Create a JCheckBox for each column
        for(int i = 0; i < labelsCheckBox.size(); i++)
        {
            final int index = i;
            toolBarTop.add(new JCheckBox(new AbstractAction(labelsCheckBox.get(i)) {
            @Override
                public void actionPerformed(ActionEvent e) {
                TableColumn column = columnModel.getColumnByModelIndex(index);
                boolean visible = columnModel.isColumnVisible(column);
                columnModel.setColumnVisible(column, !visible);
                }
            }));
        }

2 个答案:

答案 0 :(得分:5)

  • 创建ArrayList<JCheckBox>类字段。
  • 使用您正在创建的JCheckBox在for(int i = 0; i < labelsCheckBox.size(); i++) for循环中填充。
  • 通过此集合迭代设置Button的Action中JCheckBoxes的状态。
  • 我想知道你是否应该为你的按钮使用JToggleButton。

答案 1 :(得分:2)

  

我的问题是如何点击JButton重置所有内容   JCheckBox ToolBar中的toolBarTop [...] 实际上,我假装点击重置后会检查所有内容。

尝试迭代JCheckBox组件,询问每个组件是否是true的实例。如果是,请将所选内容设置为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();
            }
        });
    }    

}

这是一个完整的SSCCE来测试它:

{{1}}