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