2012-05-09 1 views
2

Я работаю над приложением, в котором я использую JprogressBar. Когда я что-то делаю, работает индикатор выполнения. Я также добавил туда функции эвакуации. когда кто-то нажимает кнопку Escape на клавиатуре, тогда сфокусированный Jpanel/Jdialog/JFrame - это dispose.It работает нормально. Моя проблема в том, что JprogressBar не останавливается. Я хочу сделать это, если какой-либо Jpanel/Jdialog/JFrame закрывается с помощью кнопки escape, тогда, если у родителя есть JProgressBar, тогда он должен быть остановлен. Как я могу это сделать? Родители всех Jpanel/Jdialog/JFrame могут быть разными?Как остановить JProgressBar на родительском?

Мой побег Функциональность, как описано выше:

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 и работает, то его следует остановить.

Мой английский не очень хорош, поэтому, пожалуйста, игнорируйте грамматические ошибки.

Заранее спасибо.

+5

для лучшего помогите скорее отредактировать свой вопрос с помощью [SSCCE] (http://sscce.org/), который продемонстрировал ваши проблемы с [KeyBindings] (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding. html) и [JProgressBar] (http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html), потому что в коде я не вижу никого – mKorbel

ответ

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, оттуда вы можете делать то, что вы хотите ...