Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的动态复选框_Java_Swing - Fatal编程技术网

java中的动态复选框

java中的动态复选框,java,swing,Java,Swing,我想在java中动态创建复选框,这样每当按下一个按钮时,就会创建并出现一个新的复选框,每当按下另一个按钮时,所有复选框都会被删除。有人能帮忙吗 到目前为止,我只有手动创建的复选框 cb1=new JCheckBox("Task 1"); cb2=new JCheckBox("Task 2"); cb3=new JCheckBox("Task 3"); cb4=new JCheckBox("Task 4"); cb5=new JCheckBox("Task 5"); cb6=new JC

我想在java中动态创建复选框,这样每当按下一个按钮时,就会创建并出现一个新的复选框,每当按下另一个按钮时,所有复选框都会被删除。有人能帮忙吗

到目前为止,我只有手动创建的复选框

cb1=new JCheckBox("Task 1"); 
cb2=new JCheckBox("Task 2"); 
cb3=new JCheckBox("Task 3"); 
cb4=new JCheckBox("Task 4"); 
cb5=new JCheckBox("Task 5"); 
cb6=new JCheckBox("Task 6"); 

addTask= new JButton("Add Task"); 
removeTask= new JButton("Remove Checked"); 

addTask.addActionListener(this); 
removeTask.addActionListener(this);

假设您创建了
JCheckBox
es的
ArrayList
,而不是cb1、cb2、cb3等,并仅为
复选框创建面板,而不是为按钮创建面板。现在,每次按下添加按钮都会创建另一个复选框,并将其添加到面板和
阵列列表
。当按下移除按钮时,清除阵列列表和面板。下面的代码只是一个示例片段,不是经过完整测试的代码,但它应该为您提供一个方向

// Up in your code
List<JCheckBox> cbarr = new ArrayList<JCheckBox>();
// The listener code
public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == addTask) // add checkbox
     {
          JCheckBox cb = new CheckBox("New CheckBox");
          cbarr.add(cb);
          cbpanel.add(cb);
     }
     else // remove checkboxs
     {
          cbarr = new ArrayList<JCheckBox>();
          cbpanel.removeAll()
     }
}

假设您创建了
JCheckBox
es的
ArrayList
,而不是cb1、cb2、cb3等,并仅为
复选框创建面板,而不是为按钮创建面板。现在,每次按下添加按钮都会创建另一个复选框,并将其添加到面板和
阵列列表
。当按下移除按钮时,清除阵列列表和面板。下面的代码只是一个示例片段,不是经过完整测试的代码,但它应该为您提供一个方向

// Up in your code
List<JCheckBox> cbarr = new ArrayList<JCheckBox>();
// The listener code
public void actionPerformed(ActionEvent e) { 
     if (e.getSource() == addTask) // add checkbox
     {
          JCheckBox cb = new CheckBox("New CheckBox");
          cbarr.add(cb);
          cbpanel.add(cb);
     }
     else // remove checkboxs
     {
          cbarr = new ArrayList<JCheckBox>();
          cbpanel.removeAll()
     }
}

而不是为每个复选框创建新变量。将对复选框的引用存储在列表中。创建新复选框时,将其添加到列表中。如果要全部删除它们,请从GUI中删除它们并清除列表。

而不是为每个复选框创建新变量。将对复选框的引用存储在列表中。创建新复选框时,将其添加到列表中。当您想全部删除它们时,请从GUI中删除它们并清除列表。

您应该使用一些布局管理器,例如,您可以通过在布局构造函数中将行或列设置为0来为其指定动态的行或列

在actionPerformed方法中,您可以使用JPanel.add()方法将新复选框添加到面板中,并在后面验证它,这样就完成了

关于删除,您可以遍历面板的组件列表并调用JPanel.remove()方法,然后验证面板


祝您好运,Boro。

您应该使用一些布局管理器,例如,您可以通过在布局构造函数中将行或列设置为0来为其指定动态的行或列

在actionPerformed方法中,您可以使用JPanel.add()方法将新复选框添加到面板中,并在后面验证它,这样就完成了

关于删除,您可以遍历面板的组件列表并调用JPanel.remove()方法,然后验证面板

祝你好运,波罗。

左边有一个
JButton
,用于
添加另一个标签。它在两列中添加标签。相同的基本原则可用于添加任意数量的
JCheckBox

要删除它们,请调用
Container.removeAll()
,然后调用相同的方法来更新GUI。

左侧有一个
JButton
,用于
添加另一个标签。它在两列中添加标签。相同的基本原则可用于添加任意数量的
JCheckBox


要删除它们,请调用
Container.removeAll()
,然后调用相同的方法来更新GUI。

动态添加/删除GUI组件时,需要告诉布局管理器已进行了更改。您可以使用如下代码执行此操作:

panel.add(....);
panel.revalidate();
panel.repaint();

动态添加/删除GUI组件时,需要告知布局管理器已进行更改。您可以使用如下代码执行此操作:

panel.add(....);
panel.revalidate();
panel.repaint();

以上所有解决方案都非常出色。另一种选择是,如果在列中有一个重要的复选框列表,那么可以考虑使用具有复选框列的JTALE,或者将列列为“标签”。将向您展示如何执行此操作,但只需扩展DefaultTableModel类并重写其getColumnClass方法,以使用复选框为列返回Boolean.class。然后用布尔对象填充模型。然后,您可以从模型中添加或删除行,并让JTable处理GUI的细节。如果您想尝试这种方式,我们可以帮助您了解具体情况

编辑1:
例如:

编辑2:
添加/删除显示的功能

编辑3:
将removeChecked和showAll方法移动到模型类中

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

@SuppressWarnings("serial")
public class CheckBoxTable extends JPanel {
   public static final String[] COLUMNS = {"Purchased", "Item"};
   public static final String[] INITIAL_ITEMS = {"Milk", "Flour", "Rice", "Cooking Oil", "Vinegar"}; 
   private CheckBoxDefaultTableModel model = new CheckBoxDefaultTableModel(COLUMNS, 0);
   private JTable table = new JTable(model);
   private JTextField itemTextField = new JTextField("item", 10);

   public CheckBoxTable() {
      JButton addItemBtn = new JButton("Add Item");
      addItemBtn.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            addItemActionPerformed();
         }
      });
      JButton removeCheckedItemsBtn = new JButton("Remove Checked Items");
      removeCheckedItemsBtn.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            removeCheckedItemsActionPerformed();
         }
      });
      JButton showAllBtn = new JButton("Show All");
      showAllBtn.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            showAllActionPerformed();
         }
      });
      itemTextField.addFocusListener(new FocusAdapter() {
         public void focusGained(FocusEvent e) {
            itemTextField.selectAll();
         }
      });
      JPanel btnPanel = new JPanel(new GridLayout(1, 0, 5, 0));
      btnPanel.add(itemTextField);
      btnPanel.add(addItemBtn);
      btnPanel.add(removeCheckedItemsBtn);
      btnPanel.add(showAllBtn);

      setLayout(new BorderLayout(5, 5));
      add(new JScrollPane(table), BorderLayout.CENTER);
      add(btnPanel, BorderLayout.SOUTH);

      for (int i = 0; i < INITIAL_ITEMS.length; i++) {
         Object[] row = {Boolean.FALSE, INITIAL_ITEMS[i]};
         model.addRow(row);
      }
   }

   private void showAllActionPerformed() {
      model.showAll();
   }

   private void removeCheckedItemsActionPerformed() {
      model.removeCheckedItems();
   }

   private void addItemActionPerformed() {
      String item = itemTextField.getText().trim();
      if (!item.isEmpty()) {
         Object[] row = {Boolean.FALSE, item};
         model.addRow(row);
      }
   }

   private static void createAndShowUI() {
      JFrame frame = new JFrame("CheckBoxTable");
      frame.getContentPane().add(new CheckBoxTable());
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
            createAndShowUI();
         }
      });
   }
}

@SuppressWarnings("serial")
class CheckBoxDefaultTableModel extends DefaultTableModel {
   private List<String> removedItemsList = new ArrayList<String>();

   public CheckBoxDefaultTableModel(Object[] columnNames, int rowCount) {
      super(columnNames, rowCount);
   }

   public void showAll() {
      if (removedItemsList.size() > 0) {
         Iterator<String> iterator = removedItemsList.iterator();
         while (iterator.hasNext()) {
            String next = iterator.next();
            Object[] row = {Boolean.TRUE, next};
            addRow(row);
            iterator.remove();
         }
      }
   }

   @Override
   public Class<?> getColumnClass(int columnNumber) {
      if (columnNumber == 0) {
         return Boolean.class;
      }
      return super.getColumnClass(columnNumber);
   }

   public void removeCheckedItems() {
      int rowCount = getRowCount();
      for (int row = rowCount - 1; row >= 0; row--) {
         if ((Boolean) getValueAt(row, 0)) {
            removedItemsList.add(getValueAt(row, 1).toString());
            removeRow(row);
         }
      }

   }
}
import java.awt.*;
导入java.awt.event.*;
导入java.util.ArrayList;
导入java.util.Iterator;
导入java.util.List;
导入javax.swing.*;
导入javax.swing.table.DefaultTableModel;
@抑制警告(“串行”)
公共类CheckBoxTable扩展了JPanel{
公共静态最终字符串[]列={“已购买”、“项目”};
公共静态最终字符串[]首字母_项={“牛奶”、“面粉”、“大米”、“食用油”、“醋”};
私有CheckBoxDefaultTableModel=新的CheckBoxDefaultTableModel(列,0);
专用JTable表=新JTable(模型);
私有JTextField itemTextField=新的JTextField(“项”,10);
公共CheckBoxTable(){
JButton addItemBtn=新JButton(“添加项”);
addItemBtn.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
addItemActionPerformed();
}
});
JButton removeCheckedItemsBtn=新JButton(“删除选中项”);
removeCheckedItemsBtn.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
removeCheckedItemActionPerformed();
}
});
JButton showAllBtn=新JButton(“全部显示”);
showAllBtn.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
表演表演(