diff --git a/src/main/java/org/scijava/ui/swing/task/SwingTaskMonitorComponent.java b/src/main/java/org/scijava/ui/swing/task/SwingTaskMonitorComponent.java index e91d134..8d9c54d 100644 --- a/src/main/java/org/scijava/ui/swing/task/SwingTaskMonitorComponent.java +++ b/src/main/java/org/scijava/ui/swing/task/SwingTaskMonitorComponent.java @@ -34,7 +34,6 @@ import org.scijava.task.Task; import org.scijava.task.event.TaskEvent; -import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; @@ -44,13 +43,12 @@ import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingConstants; -import javax.swing.UIManager; import javax.swing.border.EmptyBorder; import javax.swing.plaf.basic.BasicProgressBarUI; import javax.swing.table.AbstractTableModel; import javax.swing.table.TableCellRenderer; import java.awt.BorderLayout; -import java.awt.Color; + import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; @@ -148,6 +146,8 @@ public class SwingTaskMonitorComponent { */ private double globalProgression = 0; + private boolean rowHeightInitialized = false; + /** * Constructs a Swing Task Monitor component - clickable circular progress bar * the component can be accessed with @@ -200,7 +200,6 @@ public void mouseClicked(MouseEvent e) { taskFrame = new JFrame("Tasks"); if (undecorated) { taskFrame.setUndecorated(true); - taskFrame.setBackground(new Color(1.0f, 1.0f, 1.0f, 0.0f)); } // taskTable showing all tasks, contained in taskFrame @@ -209,7 +208,6 @@ public void mouseClicked(MouseEvent e) { taskTable.setShowGrid(false); taskTable.setIntercellSpacing(new Dimension(0, 0)); taskTable.setTableHeader(null); // no header - taskTable.setRowHeight(65); taskTable.setRowMargin(2); taskTable.setDefaultRenderer(Task.class, new TaskRenderer(false)); // restrict size of second column to the size of the stop icon @@ -266,6 +264,12 @@ private void onEvent(final TaskEvent evt) { } else { taskTableModel.addOrUpdate(task); } + if (!rowHeightInitialized) { + rowHeightInitialized = true; + TableCellRenderer renderer = taskTable.getDefaultRenderer(Task.class); + Component c = renderer.getTableCellRendererComponent(taskTable, task, false, false, 0, 0); + taskTable.setRowHeight(c.getPreferredSize().height + taskTable.getRowMargin()); + } // globalProgression has been updated during taskTableModel update globalProgressBar.setValue((int)(globalProgression*100)); } @@ -484,8 +488,7 @@ class TaskRenderer implements TableCellRenderer { JLabel labelTop = new JLabel(); // top label : task name and status JProgressBar progressBar = new JProgressBar(); // standard linear progress bar JLabel labelBottom = new JLabel(); // bottom label : task completion, and optionally time left - Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon"); // icon for canceling task - JLabel cancelTask; // container for errorIcon + JLabel cancelTask; // cancel icon public TaskRenderer(boolean isBordered) { labelTop.setVerticalTextPosition(SwingConstants.TOP); @@ -498,9 +501,8 @@ public TaskRenderer(boolean isBordered) { cell.add(labelTop,"height ::14, span"); cell.add(progressBar,"height ::3, span"); cell.add(labelBottom, "height ::14"); - cancelTask = new JLabel(errorIcon, SwingConstants.CENTER); + cancelTask = new JLabel("\u2715", SwingConstants.CENTER); cancelTask.setOpaque(true); - cancelTask.setBackground(cell.getBackground()); } @Override @@ -508,6 +510,13 @@ public Component getTableCellRendererComponent( JTable table, Object tk, boolean isSelected, boolean hasFocus, int row, int column) { + // Pick up LaF colors from the table + cell.setBackground(table.getBackground()); + cell.setForeground(table.getForeground()); + labelTop.setForeground(table.getForeground()); + labelBottom.setForeground(table.getForeground()); + cancelTask.setBackground(table.getBackground()); + cancelTask.setForeground(table.getForeground()); if (column==1) { return cancelTask; // second column : stop icon }