【发布时间】:2018-05-21 00:22:31
【问题描述】:
所以我遇到的问题是为我的 GUI 实现一个功能删除按钮。 虽然我几乎所有东西都在工作,但我一直在尝试实现这个功能。它的作用是当我单击“添加”按钮时,它会创建一个带有文本字段和一个复选框的行。 “删除”的工作原理是,一旦我单击复选框将其删除,它只会删除最近创建的字段。我的意图是 GUI 以动态方式工作,我可以单击任何复选框并仅删除选中复选框的那些特定行。 我已经研究过使用 ItemListener 的方法,但我仍在努力解决这个问题,因为我认为它是最熟练的方法。我还完成了将组件存储在数组中以进行迭代。我觉得我已经接近我现在所拥有的,任何建议表示赞赏。
下面是在我的 GUI 中创建新行的“添加”按钮代码。然后是“删除”按钮代码,它将组件放在一个数组中,但只删除最近创建的已检查的行。
add = new JButton("Add");
add.addActionListener(e ->{
rowPanel = new JPanel(new GridLayout(1,4,5,5));
for(int i = 0; i < 4; i++ ){
rowPanel.add(new JTextField(8));
}
for(int l=0; l < 1; l++){
rowPanel.add(new JCheckBox(), BorderLayout.EAST);
}
infoPanel.add(rowPanel);
infoPanel.revalidate();
infoPanel.repaint();
});
delete = new JButton("Delete");
delete.addActionListener(e -> {
Component[] components = rowPanel.getComponents();
for(Component c : components){
if(c instanceof JCheckBox){
if(((JCheckBox)c).isSelected()){
infoPanel.remove(rowPanel);
}
}
}
infoPanel.revalidate();
infoPanel.repaint();
});
【问题讨论】:
-
您的 rowPanel 变量仅包含最后一行。你需要遍历你的行。
-
如需尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。
-
@Stefan Reich,所以我认为我需要修改每个循环?而且我认为我正在使用 rowPanel 变量来生成它当前所做的更多行。
-
您需要保留您创建的行的列表。
标签: java swing user-interface dynamic