2010-05-06 41 views

回答

4

我想也許我可以問它 回報組件並刪除 按鈕

從Swing教程使用ProgressMonitorDemo(由BalusC鏈接)我做了如下修改:

public void propertyChange(PropertyChangeEvent evt) { 
    if ("progress" == evt.getPropertyName()) { 
     int progress = (Integer) evt.getNewValue(); 
     progressMonitor.setProgress(progress); 

     // Added this 

     AccessibleContext ac = progressMonitor.getAccessibleContext(); 
     JDialog dialog = (JDialog)ac.getAccessibleParent(); 
     java.util.List<JButton> components = 
      SwingUtils.getDescendantsOfType(JButton.class, dialog, true); 
     JButton button = components.get(0); 
     button.setVisible(false); 

     // end of change 

     String message = 
      String.format("Completed %d%%.\n", progress); 
     progressMonitor.setNote(message); 
     taskOutput.append(message); 
     if (progressMonitor.isCanceled() || task.isDone()) { 
      Toolkit.getDefaultToolkit().beep(); 
      if (progressMonitor.isCanceled()) { 
       task.cancel(true); 
       taskOutput.append("Task canceled.\n"); 
      } else { 
       taskOutput.append("Task completed.\n"); 
      } 
      startButton.setEnabled(true); 
     } 
    } 
} 

您還需要下載Swing Utils類。

該代碼應該只執行一次,否則當對話框關閉時你會得到一個NPE。我會讓你整理一下:)。

+0

這就是它!正是我期望的,謝謝! – Frank 2010-05-06 14:00:55

1

這是不可能的。但是,您可以按照this tutorial中所述創建自定義進度監視器。

+0

我在想也許我可以要求它返回組件並刪除按鈕。 – Frank 2010-05-06 02:50:34