1

如何从 GridBagElement 中删除元素? http://i.stack.imgur.com/1BsDW.jpg

在此处输入图像描述 我想通过单击按钮来删除选定的项目。如何将所选项目的名称作为参数发送到操作按钮?

4

2 回答 2

1

首先,不要从 GridBagLayout 中删除。使用 swing 可以将组件添加到容器中,然后将它们从容器中移除。 http://docs.oracle.com/javase/6/docs/api/java/awt/Container.html#remove%28java.awt.Component%29

要选择绿色面板,您可以为此面板注册一个 ActionListener 或 MouseListener。MouseListener 传递 MouseEvent。MouseEvent 可以通过 getSource 获取 Source,也就是绿色的 Panel。并且可以删除该面板。

一个简单的示例片段:

final JPanel mainPanel = new JPanel();
JPanel greenPanel = new JPanel();
greenPanel.addActionListener(new ActionListener(){
  @Override
  public void ActionPerformed(ActionEvent e){
    int answer = JOptionPane.showConfirmDialog(null, "Delete?");
    if(answer == JOptionPane.YES_OPTION){
      mainPanel.remove(e.getSource());
    }
  }
});
mainPanel.add(greenPanel);
于 2013-06-06T00:05:07.703 回答
1

您将希望在按钮和其他控件与您的视图之间建立某种契约。

想要修改视图的事情不应该做任何你不希望他们做的事情(比如改变布局)。

我建议创建一个简单的界面,提供对您希望外部控件访问的操作(如添加、编辑、删除)的访问权限。您可以将其传递给您的控件,在那里通过限制控件实际可以执行的操作而不向它们公开不必要的功能(您不会其中之一删除您的主面板;))。

当您想删除一个选定的任务时,您单击相应的按钮,它会在您的模型上调用相应的“删除”方法。

然后,您的实现将找到选定的项目(我假设您保持对它的引用或有一些方法可以找到)并简单地将其从它的父容器中删除。

于 2013-06-06T01:07:01.037 回答