0

我正在ToolBar用 oneJButton和 some JCheckBoxs 创建一个来隐藏或显示 a 中的列JTable

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

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

我的问题是如何使 JButton 单击后重置ToolBar.

这是我的代码,我在其中创建它们并添加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);
                }
            }));
        }
4

2 回答 2

5
  • 创建一个ArrayList<JCheckBox>类字段。
  • for(int i = 0; i < labelsCheckBox.size(); i++)使用您正在创建的 JCheckBox 将其填充到for 循环中。
  • 遍历此集合,设置按钮操作中 JCheckBoxes 的状态。
  • 我想知道您是否应该为您的按钮使用 JToggleButton。
于 2013-10-10T21:58:53.170 回答
2

我的问题是如何使单击后JButton重置所有 JCheckBox . [...]实际上,我假装一旦单击重置以检查所有这些。ToolBar

尝试迭代toolBarTop组件,询问每个组件是否是JCheckBox. 如果是这样,请将 selected 设置为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);
                }
            }
        }
    });

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

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();
            }
        });
    }    

}
于 2013-10-10T22:03:05.107 回答