2014-01-23 3 views
-3

Я искал весь путь, но не смог найти решение. Я хочу изменить значок java по умолчанию на индикаторе выполнения, как я использовал JProgressBar.Как изменить значок Java по умолчанию в JProgressBar?

Вот мой небольшой фрагмент

public class SwingWorkerProgressMonitor implements PropertyChangeListener { 

private static final int PROGRESS_BAR_WIDTH = 200; 
private ProgressMonitor progressMonitor; 
private final SwingWorker<?, ?> task; 
private SwingWorker<Void, Void> backingTask; 
private String message; 
private final JProgressBar progressBar = new JProgressBar(); 
int progress = 0; 
private final String title; 

/* 
* Progress monitor that takes a swing worker and shows its progress 
*/ 
public SwingWorkerProgressMonitor(SwingWorker<?, ?> sw, String title) { 

this.task = sw; 
this.title = title; 

} 

/** 
* This Fu2nction Invoked when task's progress property changes. 
*/ 
@Override 
public void propertyChange(PropertyChangeEvent evt) { 
if (evt.getPropertyName().equals("progress")) { 
    int progress = (Integer) evt.getNewValue(); 
    updateProgress(progress); 
} 

} 

private void updateProgress(int progress) { 
progressMonitor.setProgress(progress); 
message = String.format(PlasaApplication.getTranslator().getString(PlasaLanguageKey.PROGRESS_LODING_DATA) 
    + "(%d%%)", progress); 
progressMonitor.setNote(message); 
if (progressMonitor.isCanceled() || task.isDone()) { 
    Toolkit.getDefaultToolkit().beep(); 
    if (progressMonitor.isCanceled()) { 
    task.cancel(true); 
    } 
} 
} 

/** 
* This function start the progress When click the save button on 
* 
* 
* @param component 
*/ 
public void start(Component component) { 
// creates progress bar 
Dimension preferredSize = progressBar.getPreferredSize(); 
preferredSize.width = PROGRESS_BAR_WIDTH; 
progressBar.setPreferredSize(preferredSize); 
UIManager.put("ProgressMonitor.progressText", title); 
UIManager.put("OptionPane.cancelButtonText", 
    PlasaApplication.getTranslator().getString(PlasaLanguageKey.GLOBAL_CANCEL)); 
progressMonitor = new ProgressMonitor(progressBar, "", "", 0, 100); 
progressMonitor.setProgress(0); 

if (task == null) { 
    throw new IllegalArgumentException("swing worker is not set"); 
} 

backingTask = new BackingTask(task); 
task.addPropertyChangeListener(this); 
backingTask.execute(); 
} 

/** 
* Inner class Here begin the progress status 
* 
*/ 
private class BackingTask extends SwingWorker<Void, Void> { 

SwingWorker<?, ?> worker; // backing worker 

public BackingTask(SwingWorker<?, ?> worker) { 

    this.worker = worker; 

} 

// run the task on background 
@Override 
protected Void doInBackground() throws Exception { 

    worker.execute(); 
    return null; 
}; 

/** 
* This function close the progress monitor when task is done or cancel 
*/ 
@Override 
public void done() { 
    Toolkit.getDefaultToolkit().beep(); 
    progressMonitor.close(); 
} 

} 

}

+3

Где находится JProgressBar? О какой значке вы говорите? Можете ли вы представить небольшой пример, демонстрирующий, что вы делаете? –

+0

Stackoverflow не является учебным сайтом, это скорее ориентированный на ошибку помощник. Вы должны предоставить нам свой подход к проблеме, и мы с радостью поможем вам разобраться. Мы не будем говорить «здесь, сделайте это», мы скажем «вместо этой строки, попробуйте это» или «вы считали, что пытаетесь zzz вместо yyy»? Поэтому, пожалуйста, предоставьте нам код и stacktracke, если возможно – diazazar

+0

DYM ['ProgressMonitor'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/ProgressMonitor.html)? «JProgressBar» не имеет значка. Чтобы лучше помочь, отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve). –

ответ

1

Итак, если вы хотите изменить значок вашего приложения (JFrame), и вы хотите сделать это в ходе подклассу, попробуйте следующим образом:

public class YourFrame extends JFrame { 
    public YourFrame() { 
     ... new SwingWorkerProgressMonitor(this, ...); 
    } 
} 

public class SwingWorkerProgressMonitor extends ... { 
    private final JFrame frame; 

    public SwingWorkerProgressMonitor(JFrame frame, ...) { 
     this.frame = frame; 
     ... 
    } 

    private void setIconInProgress() { 
     this.frame.setIconImage(...); 
    } 
} 
+0

Получил решение bobbel, спасибо вам большое спасибо ... :) – user2914906

Смежные вопросы