尝试通过单击“取消”按钮来释放扩展JXPanel的类

时间:2015-01-02 06:23:21

标签: java swing jpanel dispose

我需要在点击JXPanel按钮时放置一个扩展Cancel的类,似乎无法找到任何方法。

我有A级,有按钮A. 点击按钮A,B类被调用。 B类有一个显示所有内容的显示方法,并调用ClassC

class A : in actionPerformed() 
if (e.getSource().equals(buttonA )){
            try {
                new ClassB(parent);
            } catch (BusinessException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }

In class B


private void display() throws BusinessException{
        dialog = new JDialog(parent, "Dialog");
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        dialog.setContentPane(createContentPane());
        dialog.setModal(true);
        //dialog.setBackground(Color.WHITE);
        dialog.setMinimumSize(new Dimension(1190, 200));
        //dialog.setMaximumSize(new Dimension(1190, 500));
        dialog.pack();
        dialog.setLocationRelativeTo(parent);
        dialog.setVisible(true);
    }

in createContentPane() 

    public JPanel createContentPanel() throws BusinessException{
        JPanel panel = new JPanel(new CardLayout());
        panel.setBackground(Color.WHITE);

        panel.add("New Dialog", new ClassC(parent));

        return panel;
    }

现在我在ClassC中有取消按钮,单击此C类我需要关闭ClassB的对话框

1 个答案:

答案 0 :(得分:2)

首选解决方案是定义某种类型的控制器,您可以将其传递给C类,它可以用来提供某些操作的通知,例如取消操作。

控制器将负责根据动作/事件确定应该做什么

这是Model-View-Controller

的示例

另一种解决方案是允许对话框控制取消(以及其他相关的用户操作)本身,因为取消并不总是对C类有意义,要么您将使用该类生成的值,要么您赢了& #39;它不应该是C级的责任来管理这个(模型进入的地方)

另一个解决方案是将对话框的引用传递给类C,但这会在对话框和类之间产生紧密耦合并不必要地暴露对话

另一个解决方案是使用SwingUtilities.windowForComponent,这将允许您获取对包含该类的窗口的引用,但这会假设该类可能如何使用