Skip to content

Commit 182c3c4

Browse files
committed
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
1 parent 11987eb commit 182c3c4

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

src/main/java/org/scijava/ui/swing/task/SwingTaskMonitorComponent.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import org.scijava.task.Task;
3535
import org.scijava.task.event.TaskEvent;
3636

37-
import javax.swing.Icon;
3837
import javax.swing.JComponent;
3938
import javax.swing.JFrame;
4039
import javax.swing.JLabel;
@@ -44,7 +43,6 @@
4443
import javax.swing.JScrollPane;
4544
import javax.swing.JTable;
4645
import javax.swing.SwingConstants;
47-
import javax.swing.UIManager;
4846
import javax.swing.border.EmptyBorder;
4947
import javax.swing.plaf.basic.BasicProgressBarUI;
5048
import javax.swing.table.AbstractTableModel;
@@ -148,6 +146,8 @@ public class SwingTaskMonitorComponent {
148146
*/
149147
private double globalProgression = 0;
150148

149+
private boolean rowHeightInitialized = false;
150+
151151
/**
152152
* Constructs a Swing Task Monitor component - clickable circular progress bar
153153
* the component can be accessed with
@@ -208,7 +208,6 @@ public void mouseClicked(MouseEvent e) {
208208
taskTable.setShowGrid(false);
209209
taskTable.setIntercellSpacing(new Dimension(0, 0));
210210
taskTable.setTableHeader(null); // no header
211-
taskTable.setRowHeight(65);
212211
taskTable.setRowMargin(2);
213212
taskTable.setDefaultRenderer(Task.class, new TaskRenderer(false));
214213
// restrict size of second column to the size of the stop icon
@@ -265,6 +264,12 @@ private void onEvent(final TaskEvent evt) {
265264
} else {
266265
taskTableModel.addOrUpdate(task);
267266
}
267+
if (!rowHeightInitialized) {
268+
rowHeightInitialized = true;
269+
TableCellRenderer renderer = taskTable.getDefaultRenderer(Task.class);
270+
Component c = renderer.getTableCellRendererComponent(taskTable, task, false, false, 0, 0);
271+
taskTable.setRowHeight(c.getPreferredSize().height + taskTable.getRowMargin());
272+
}
268273
// globalProgression has been updated during taskTableModel update
269274
globalProgressBar.setValue((int)(globalProgression*100));
270275
}
@@ -483,8 +488,7 @@ class TaskRenderer implements TableCellRenderer {
483488
JLabel labelTop = new JLabel(); // top label : task name and status
484489
JProgressBar progressBar = new JProgressBar(); // standard linear progress bar
485490
JLabel labelBottom = new JLabel(); // bottom label : task completion, and optionally time left
486-
Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon"); // icon for canceling task
487-
JLabel cancelTask; // container for errorIcon
491+
JLabel cancelTask; // cancel icon
488492

489493
public TaskRenderer(boolean isBordered) {
490494
labelTop.setVerticalTextPosition(SwingConstants.TOP);
@@ -497,9 +501,8 @@ public TaskRenderer(boolean isBordered) {
497501
cell.add(labelTop,"height ::14, span");
498502
cell.add(progressBar,"height ::3, span");
499503
cell.add(labelBottom, "height ::14");
500-
cancelTask = new JLabel(errorIcon, SwingConstants.CENTER);
504+
cancelTask = new JLabel("\u2715", SwingConstants.CENTER);
501505
cancelTask.setOpaque(true);
502-
cancelTask.setBackground(cell.getBackground());
503506
}
504507

505508
@Override
@@ -513,6 +516,7 @@ public Component getTableCellRendererComponent(
513516
labelTop.setForeground(table.getForeground());
514517
labelBottom.setForeground(table.getForeground());
515518
cancelTask.setBackground(table.getBackground());
519+
cancelTask.setForeground(table.getForeground());
516520
if (column==1) {
517521
return cancelTask; // second column : stop icon
518522
}

0 commit comments

Comments
 (0)