2014-01-23 1 views
-3

나는 모든 방법을 찾았지만 해결책을 찾지 못했습니다. 진도 표시 줄의 기본 자바 아이콘 을 JProgressBar으로 변경하고 싶습니다. 여기 JProgressBar에서 기본 Java 아이콘을 변경하는 방법은 무엇입니까?

당신이 당신의 응용 프로그램합니다 ( JFrame)의 아이콘을 변경하려면 가정, 그래서 내 작은 조각

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는 튜토리얼 사이트가 아니라 오류 지향적 인 보조자입니다. 문제에 대한 귀하의 접근 방식을 우리에게 알려 주셔야합니다. 우리는 기꺼이 당신이 알아 내도록 도울 것입니다. 우리는 '여기, 이것을해라.'라고 말하지 않을 것입니다. 우리는 '그 선 대신에 이것을 말하십시오.'라고 말할 것입니다. 아니면 yyy 대신 zzz를 시도해 보았습니까? 가능한 경우 코드 및 스택 트레이크를 제공하십시오. – diazazar

+0

DYM ['ProgressMonitor'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/ProgressMonitor.html)? 'JProgressBar'에는 아이콘이 없습니다. 더 빨리 도움을 받으려면 [MCVE] (http://stackoverflow.com/help/mcve)를 게시하십시오. –

답변

1

이며 진행 서브 클래스에서하고 싶지는 시도 다음과 같은 방법으로 :

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