如何获得JDialog方法?

时间:2014-04-16 14:27:09

标签: java swing jdialog

我只是被app困住了。事情是在第二个actionListener中,我希望获得对象或更具体地访问我的JDialog类中的方法。

我创建的对话框很少,但不可见。在第一个actionListener中,我通过返回JDialog的getDialog函数找到它们。所以我可以看到它们中的每一个。 我需要帮助的第二个actionListener正在显示JOptionPane,如果用户选择了YES_OPTION,我想从特定的对话框中运行我的方法。

我不清楚我是否尝试修复我的解释,以便您能够理解它。

modifyButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            JButton thisButton = (JButton) e.getSource();
            JPanel parentPanel = (JPanel) thisButton.getParent();
            Container topLevel = parentPanel.getTopLevelAncestor();
            MainFrame mainFrame = (MainFrame) topLevel;

            mainFrame.getDialog(TABLECOUNTER).setVisible(true);

        }
    });

    abortButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Object[] options = {"Tak", "Nie"};
            int userReply = JOptionPane.showOptionDialog(null, "Czy na pewno chcesz anulować rachunek?", "Probujesz anulować rachunek!", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]);
            if (userReply == JOptionPane.YES_OPTION) {
                JButton thisButton = (JButton) e.getSource();
                JPanel parentPanel = (JPanel) thisButton.getParent();
                Container topLevel = parentPanel.getTopLevelAncestor();
                MainFrame mainFrame = (MainFrame) topLevel;

                mainFrame.getDialog(TABLECOUNTER).myMethod(); //here
            }
        }
    });

1 个答案:

答案 0 :(得分:0)

  

“我希望获得对象或更具体地访问我的JDialog类中的方法”

如果方法getDialog返回标准JDialog

public JDialog getDialog(...) {}

然后你会遇到JDialog的方法,没有适当的强制转换或更改返回类型。这可以解释为什么您能够在第一种方法中setVisible,因为JDialog确实有方法setVisible。因此,要访问方法myMethod,您需要进行一些投射。

((MyDialog)mainFrame.getDialog(TABLECOUNTER)).myMethod();