Java 如何让我的“删除”按钮实际删除名称及其旁边的复选框?
我试图让我的程序让用户选中一个旁边有名称的复选框,然后在按delete按钮时可以删除整行(从arrayList)。我的程序将如下所示: 这是我的密码: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
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.
伪码
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();
}
}