所以我的问题是为我的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();
});
答案 0 :(得分:0)
您可以将JTable用作容器,并添加一个自定义行,该行是复选框和文本字段。这样你只需得到复选框的事件,看看它所在的JTable中的索引并将其删除。
这可能有用: https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender