From 11987ebb812362e337a97a185d1439d4aab3cb89 Mon Sep 17 00:00:00 2001 From: Nicolas Chiaruttini Date: Sun, 29 Mar 2026 19:37:09 +0200 Subject: [PATCH 1/2] With layout color being ignored in task monitor component. --- .../scijava/ui/swing/task/SwingTaskMonitorComponent.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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..660339a 100644 --- a/src/main/java/org/scijava/ui/swing/task/SwingTaskMonitorComponent.java +++ b/src/main/java/org/scijava/ui/swing/task/SwingTaskMonitorComponent.java @@ -50,7 +50,7 @@ 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; @@ -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 @@ -508,6 +507,12 @@ 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()); if (column==1) { return cancelTask; // second column : stop icon } From 182c3c4d7b5b445aa98d0872f109067daf0138f9 Mon Sep 17 00:00:00 2001 From: Nicolas Chiaruttini Date: Sun, 29 Mar 2026 21:04:41 +0200 Subject: [PATCH 2/2] Task monitor swing component improvement: * Replace task cancel icon with a simple cross character (better cross OS support). * Fix foreground color * Fix incorrect table cell height --- .../swing/task/SwingTaskMonitorComponent.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) 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 660339a..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,7 +43,6 @@ 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; @@ -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 @@ -208,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 @@ -265,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)); } @@ -483,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); @@ -497,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 @@ -513,6 +516,7 @@ public Component getTableCellRendererComponent( 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 }