From 35cc451a5c53b23531a46eb2bff901cd63e4df09 Mon Sep 17 00:00:00 2001 From: Benjamin Culkin Date: Wed, 24 Sep 2025 17:40:17 -0400 Subject: Add a JBrowser component + example This adds a JBrowser Swing component that is intended to work similarly to how the NSBrowser component in Swing works --- .../java/bjc/utils/gui/browser/JBrowserModel.java | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 base/src/main/java/bjc/utils/gui/browser/JBrowserModel.java (limited to 'base/src/main/java/bjc/utils/gui/browser/JBrowserModel.java') diff --git a/base/src/main/java/bjc/utils/gui/browser/JBrowserModel.java b/base/src/main/java/bjc/utils/gui/browser/JBrowserModel.java new file mode 100644 index 0000000..d95badc --- /dev/null +++ b/base/src/main/java/bjc/utils/gui/browser/JBrowserModel.java @@ -0,0 +1,36 @@ +package bjc.utils.gui.browser; + +/** Data model for JBrowser (hierarchical, like TreeModel but simpler). */ +public interface JBrowserModel { + Object getRoot(); + + int getChildCount(Object parent); + + Object getChild(Object parent, int index); + + default int indexOfChild(Object parent, Object child) { + int n = getChildCount(parent); + for (int i = 0; i < n; i++) + if (getChild(parent, i).equals(child)) + return i; + return -1; + } + + boolean isLeaf(Object node); + + /** Display text for nodes (used by default renderer & default filter). */ + default String getText(Object node) { + return String.valueOf(node); + } + + /** True if node can expand (used by default renderer). */ + default boolean isExpandable(Object node) { + return !isLeaf(node); + } + + /** Header text for the column that is showing the children of parentNode. */ + default String getColumnHeader(Object parentNode, int depthFromRoot) { + String t = getText(parentNode); + return (t == null || t.isEmpty()) ? "(root)" : t; + } +} \ No newline at end of file -- cgit v1.2.3