【问题标题】:Advice on Implementing a simple Delete button in Swing在 Swing 中实现一个简单的删除按钮的建议
【发布时间】: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 exampleShort, Self Contained, Correct Example
  • @Stefan Reich,所以我认为我需要修改每个循环?而且我认为我正在使用 rowPanel 变量来生成它当前所做的更多行。
  • 您需要保留您创建的行的列表。

标签: java swing user-interface dynamic


【解决方案1】:

您可以将 JTable 用作容器并添加自定义行,即复选框和文本字段。这样你只需要获取复选框的事件并查看它所在的 JTable 中的索引并删除它。

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

【讨论】:

    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 2020-03-21
    • 1970-01-01
    • 2020-01-28
    相关资源
    最近更新 更多