package visual; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.text.DateFormat; import java.text.NumberFormat; import java.util.Date; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.SwingConstants; import mediawiki.MediaWikiTask; import mediawiki.MediaWikiThread; import mediawiki.event.CompletedListener; import mediawiki.event.ProgressChangeEvent; import mediawiki.event.ProgressChangeListener; public class TaskPanel extends JPanel implements ProgressChangeListener<MediaWikiTask,Double>, CompletedListener { private JProgressBar progress = null; private MediaWikiThread task = null; public TaskPanel(MediaWikiThread t){ task = t; setLayout(new BorderLayout()); setMaximumSize(new Dimension(Integer.MAX_VALUE, 50)); add(new JLabel(t.getTask().getClass().getSimpleName()), BorderLayout.NORTH); progress = new JProgressBar(SwingConstants.HORIZONTAL){ @Override public String getString() { NumberFormat nf = NumberFormat.getPercentInstance(); nf.setMaximumFractionDigits(2); Date d = task.getTask().getETA(); String s = ""; if(d != null) s = " – "+DateFormat.getInstance().format(d); return nf.format(getPercentComplete())+s; } }; progress.setMaximum(t.getTask().getTogo()); progress.setValue(t.getTask().getDone()); progress.setStringPainted(true); add(progress,BorderLayout.CENTER); add(new JButton(new AbstractAction("Anhalten") { @Override public void actionPerformed(ActionEvent arg0) { task.getTask().setStopped(true); TaskPanel.this.setVisible(false); TaskPanel.this.setEnabled(false); } }), BorderLayout.EAST); t.getTask().addProgressChangeListener(this); t.getTask().addCompletedListener(this); } @Override public void progressChanged(ProgressChangeEvent<MediaWikiTask,Double> r) { progress.setValue(r.getReferer().getDone()); progress.setMaximum(r.getReferer().getTogo()); } @Override public void completed() { setVisible(false); getParent().remove(this); } }