关于在Swing

时间:2017-12-07 00:44:03

标签: java swing user-interface dynamic

所以我的问题是为我的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();


 });

1 个答案:

答案 0 :(得分:0)

您可以将JTable用作容器,并添加一个自定义行,该行是复选框和文本字段。这样你只需得到复选框的事件,看看它所在的JTable中的索引并将其删除。

这可能有用: https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#editrender