如何在父级上停止JProgressBar?

时间:2012-05-09 11:36:36

标签: java swing jframe jpanel jprogressbar

我正在使用JprogressBar的应用程序,当我正在做某事时,进度条正在运行。我还在那里添加了转义功能。当任何人点击键盘的Escape按钮然后聚焦Jpanel / Jdialog / JFrame处理。它工作正常。我的问题是JprogressBar没有停止。我想这样做,如果任何Jpanel / Jdialog / JFrame通过转义按钮关闭然后如果它的父级有JProgressBar那么它应该被停止。我怎样才能做到这一点?所有Jpanel / Jdialog / JFrame的父母可以有所不同吗?

我的转义功能如上:

public static void setDisposeOnEsc(JComponent c, final Object promptControl) {
        Action escape = new AbstractAction() {

            {
                putValue(NAME, "escape");
            }

            public void actionPerformed(ActionEvent e) {
                    JComponent source = (JComponent) e.getSource();
                    try {
                        Window window = SwingUtilities.getWindowAncestor(source);
                        window.dispose();
                    } catch (Exception ex) {
                    }
                    try {
                        Dialog dialog = (Dialog) source.getFocusCycleRootAncestor();
                        dialog.dispose();
                    } catch (Exception ex) {
                    }
                    try {
                        JFrame jFrame = (JFrame) source.getFocusCycleRootAncestor();
                        jFrame.dispose();
                    } catch (Exception ex) {
                    }   
            }
        };
        Object name = escape.getValue(Action.NAME);
c.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"),name);
        c.getActionMap().put(name, escape);
    }

我想这样做,如果有任何Jpanel / Jdialog / JFrame通过上面的方法处理,那么如果它的父级有JprogressBar并且正在运行那么它应该被停止。

我的英语不太好,所以请忽略语法错误。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我不完全确定我理解,但你可以使用像

这样的东西
public static <T extends Component> List<T> findAllChildren(JComponent component, Class<T> clazz) {

    List<T> lstChildren = new ArrayList<T>(5);
    for (Component child : component.getComponents()) {

        if (clazz.isInstance(child)) {

            lstChildren.add((T) child);

        }

        if (child instanceof JComponent) {

            lstChildren.addAll(findAllChildren((JComponent)child, clazz));

        }

    }

    return Collections.unmodifiableList(lstChildren);

}

要找到所有对JProgressBar的引用,你可以从那里做你想要的......