Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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_Arraylist_Jbutton_Actionlistener_Jcheckbox - Fatal编程技术网

Java 如何让我的“删除”按钮实际删除名称及其旁边的复选框?

Java 如何让我的“删除”按钮实际删除名称及其旁边的复选框?,java,arraylist,jbutton,actionlistener,jcheckbox,Java,Arraylist,Jbutton,Actionlistener,Jcheckbox,我试图让我的程序让用户选中一个旁边有名称的复选框,然后在按delete按钮时可以删除整行(从arrayList)。我的程序将如下所示: 这是我的密码: import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.ArrayList; import java.awt.TextField; public class ManageUsersGUI1 extends JPanel { p

我试图让我的程序让用户选中一个旁边有名称的复选框,然后在按delete按钮时可以删除整行(从arrayList)。我的程序将如下所示:

这是我的密码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.awt.TextField;

public class ManageUsersGUI1 extends JPanel {
    public static ArrayList<AddUsers> users = new ArrayList<>();

    private JLabel addNewUserLabel;
    private JTextField addNewUserTextField;
    private JLabel deleteUsersLabel;
    private JButton addButton;
    private JButton deleteButton;
    private JPanel namePanel;

    public ManageUsersGUI1() {
        //construct components
        addNewUserLabel = new JLabel ("Add new User here:");
        addNewUserTextField = new JTextField (0);
        deleteUsersLabel = new JLabel ("Select which User(s) you would like to delete:");
        addButton = new JButton ("Add");
        deleteButton = new JButton ("Delete");
        namePanel = new JPanel();
        namePanel.setLayout(new BoxLayout(namePanel, BoxLayout.Y_AXIS));

        //set components properties
        addNewUserTextField.setToolTipText ("Enter name and click on Add button.");
        addButton.setToolTipText ("Click here to Add new user.");
        deleteButton.setToolTipText ("Click here to delete User(s) selected.");

        //adjust size and set layout
        setPreferredSize (new Dimension (580, 485));
        setLayout (null);

        //add components
        add (addNewUserLabel);
        add (addNewUserTextField);
        add (deleteUsersLabel);
        add (namePanel);
        add (addButton);
        add (deleteButton);

        //set component bounds (only needed by Absolute Positioning)
        addNewUserLabel.setBounds (85, 130, 120, 25);
        addNewUserTextField.setBounds (235, 130, 125, 25);
        deleteUsersLabel.setBounds (135, 225, 281, 25);
        addButton.setBounds (385, 130, 100, 25);
        namePanel.setBounds(225, 270, 140, 0);
        deleteButton.setBounds (230, 335, 100, 25);

        addButton.addActionListener(new AddButtonListener());

        deleteButton.addActionListener(new DeleteButtonListener());


    }

    private class AddButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            String text = addNewUserTextField.getText();
            users.add(new AddUsers(text));

            // Display the charges.
            JOptionPane.showMessageDialog(null, text + " has been added.");

            JCheckBox nameCheckBox = new JCheckBox();
            nameCheckBox.setText(addNewUserTextField.getText());
            namePanel.add(nameCheckBox);
            namePanel.setBounds(225, 270, 140, namePanel.getHeight() + 25);
            deleteButton.setBounds(230, deleteButton.getY() + 25, 100, 25);
            JFrame frame = (JFrame) getRootPane().getParent();
            frame.setSize(frame.getWidth(), frame.getHeight() + 25);
            frame.pack();
        }
    }

    private class DeleteButtonListener implements ActionListener {
         @Override
         public void actionPerformed(ActionEvent e) {
            ///STUCK HERE///   
         }
    }      


    public static void main (String[] args) {
        JFrame frame = new JFrame ("AddUsersPanel1");
        frame.setTitle("Manage Users");
        frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add (new ManageUsersGUI1());
        frame.pack();
        frame.setVisible (true);
    }
}

如果您可以成功地将JComponents添加到屏幕,那么以下内容应该会有所帮助:

 add(myComponent);
 //your component should be there, if not you may call 
 /*repaint()*/
 //then when you want to remove, call
 remove(myComponent);
 //remember that you need to actually properly set the text for the JComboBox items.
伪码

  • 反复 children每次获取一个children的引用
  • 检查是否 该子项是JCheckBox的实例
  • 如果是,请确认检查 复选框子项已勾选(选中)
  • 如果是,则调用
    namePanel.remove(子级)
  • 当您完成删除所有符合条件的 子对象,调用
    revalidate()
    重新绘制()(按该顺序)
    “名称”面板,以确保用户界面正确刷新
  • 这是我完成的代码:

    private class DeleteButtonListener implements ActionListener {
         @Override
         public void actionPerformed(ActionEvent e) {
            for(Component component : namePanel.getComponents()) {
               if(component instanceof JCheckBox) {
                  if(((JCheckBox)component).isSelected())
                     namePanel.remove(component);
               }
            }
            namePanel.revalidate();
            namePanel.repaint();
         }   
    }
    

    这与您的功能无关。这些是编译器错误。您正在使用尚未声明的变量。'users`根本不声明,
    namechebox
    AddButtonListener
    中的一个局部变量,但是您正在尝试在
    DeleteButtonListener
    中使用它。我不知道如何将这些复选框与输入的字符串一起删除,因为它是通过JPanel设置的。单击“添加”时,我已经成功地将文本字段中的所有内容添加到我的程序中。我并不是想得到一个JComboBox,而是想在根据我选择的名称按delete键时删除包括复选框在内的项目。它不是JComboBox…您不能对要删除的组件调用remove吗?尝试调用repaint();之后,或重新验证();问题是我不知道如何调用组件以便从arraylist中删除名称。每次我尝试在DeleteButtonListener下放置nameCheckBox时,它都会说他们找不到符号,我甚至尝试放置
    JCheckBox namechebox=new JCheckBox()作为一个字段,它不起作用。您不知道如何从ArrayList中删除项?用户。是否删除(对象o)?然后刷新你的列表?对不起,我没有时间解决你的问题!我真的不明白你的问题是什么,我知道如何从ArrayList中删除它,但我也想用它删除JCheckBox。我不知道;我甚至不知道如何改写这个。我不知道如何调用它,因为在DeleteButtonListener下编写时找不到nameCheckBox。然后我尝试将JCheckBox设置为一个字段,但它也不起作用。
    
    private class DeleteButtonListener implements ActionListener {
         @Override
         public void actionPerformed(ActionEvent e) {
            for(Component component : namePanel.getComponents()) {
               if(component instanceof JCheckBox) {
                  if(((JCheckBox)component).isSelected())
                     namePanel.remove(component);
               }
            }
            namePanel.revalidate();
            namePanel.repaint();
         }   
    }