summaryrefslogtreecommitdiff
path: root/base/src/examples/java/bjc
diff options
context:
space:
mode:
authorBenjamin Culkin <scorpress@gmail.com>2025-12-07 17:31:40 -0500
committerBenjamin Culkin <scorpress@gmail.com>2025-12-07 17:31:40 -0500
commit8608cb13602d8df3cd3d2f96b1cc3a14d488fe7d (patch)
treeca0cccf81040f1fee22236fda38cfb9a05d5899f /base/src/examples/java/bjc
parent15b66b44c3beaf64d58e39870b62eee5a48ba2b3 (diff)
Add MultiTaskProgressPanel
Adds MultiTaskProgressPanel. This is a Swing component usable for monitoring background tasks similar to the way ProgressMonitor works, but instead of opening a dialog for each tasks, it displays them like a browser download manager
Diffstat (limited to 'base/src/examples/java/bjc')
-rw-r--r--base/src/examples/java/bjc/utils/examples/gui/panels/MultiTaskProgressPanelDemo.java55
1 files changed, 55 insertions, 0 deletions
diff --git a/base/src/examples/java/bjc/utils/examples/gui/panels/MultiTaskProgressPanelDemo.java b/base/src/examples/java/bjc/utils/examples/gui/panels/MultiTaskProgressPanelDemo.java
new file mode 100644
index 0000000..f417903
--- /dev/null
+++ b/base/src/examples/java/bjc/utils/examples/gui/panels/MultiTaskProgressPanelDemo.java
@@ -0,0 +1,55 @@
+package bjc.utils.examples.gui.panels;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
+
+import bjc.utils.gui.panels.MultiTaskProgressPanel;
+import bjc.utils.gui.panels.MultiTaskProgressPanel.TaskHandle;
+
+/**
+ * Demo for {@link MultiTaskProgressPanel}
+ */
+public class MultiTaskProgressPanelDemo {
+ /**
+ * Main method
+ * @param args Unused CLI args
+ */
+ public static void main(String[] args) {
+ SwingUtilities.invokeLater(() -> {
+ JFrame frame = new JFrame("MultiTaskProgressPanel demo");
+ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+ MultiTaskProgressPanel panel = new MultiTaskProgressPanel();
+ frame.add(panel, BorderLayout.CENTER);
+
+ JButton addTask = new JButton("Start fake task");
+ addTask.addActionListener(e -> {
+ TaskHandle handle = panel.startTask("Saving large collection",
+ 0, 100, null);
+
+ // Simulate background work
+ new Thread(() -> {
+ for (int i = 0; i <= 100; i++) {
+ if (handle.isCancelled()) break;
+ handle.setProgress(i);
+ handle.setNote("Step " + i + " of 100");
+ try {
+ Thread.sleep(50);
+ } catch (InterruptedException ignored) {
+ }
+ }
+ handle.done();
+ }, "FakeWorker").start();
+ });
+
+ frame.add(addTask, BorderLayout.SOUTH);
+
+ frame.setSize(500, 400);
+ frame.setLocationRelativeTo(null);
+ frame.setVisible(true);
+ });
+ }
+}