java - 尝试在单击“取消”按钮时处理扩展 JXPanel 的类

标签 java swing jpanel dispose

我需要在单击Cancel按钮时处理一个扩展JXPanel的类,似乎找不到任何方法。

我有一个 A 类,有按钮 A 单击按钮 A 后,B 类将被调用。 B类有一个显示所有内容的显示方法,并调用C类

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 中有取消按钮,单击此 Class C 时我需要关闭 ClassB 的对话框

最佳答案

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

Controller 将负责根据操作/事件确定应该做什么

这是 Model-View-Controller 的示例

另一个解决方案是允许对话框控制取消(以及其他相关的用户操作)本身,因为取消对于类 C 并不总是有意义,您要么使用该类生成的值,要么不使用,管理这个不应该是 C 类的责任(这就是模型的作用)

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

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

关于java - 尝试在单击“取消”按钮时处理扩展 JXPanel 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27738210/

相关文章:

Java Swing 制作具有自定义尺寸的盒子

java - JPanel - 网格布局

java - java中的分割字符串给出了一些问题

java - 以编程方式删除按钮

java - Spring XML 架构问题

java - 如何在 Java 中使用 JSlider 设置标签匹配主要刻度

java - JScrollPane 和 JViewport 最大尺寸小于内容的滚动限制

java - KeyListener 根本没有反应

Java 8 Function类addThen默认方法

java - 如何在 GridBagLayout 上放置背景图片