Skip to content

Commit

Permalink
JXMaintananceTree extends JXTree statt JXTree in TreeMaintenancePanel
Browse files Browse the repository at this point in the history
  • Loading branch information
homebeaver committed Apr 23, 2023
1 parent db2bbe6 commit 009c227
Show file tree
Hide file tree
Showing 2 changed files with 150 additions and 39 deletions.
130 changes: 130 additions & 0 deletions src/main/java/org/jdesktop/swingx/demos/tree/JXMaintananceTree.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
package org.jdesktop.swingx.demos.tree;

import java.awt.Component;
import java.util.logging.Logger;

import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreeModel;

import org.jdesktop.swingx.JXTree;
import org.jdesktop.swingx.renderer.ComponentProvider;
import org.jdesktop.swingx.renderer.DefaultTreeRenderer;
import org.jdesktop.swingx.renderer.IconValue;
import org.jdesktop.swingx.renderer.StringValue;
import org.jdesktop.swingx.renderer.StringValues;
import org.jdesktop.swingx.renderer.WrappingIconPanel;
import org.jdesktop.swingx.renderer.WrappingProvider;
import org.jdesktop.swingx.rollover.RolloverRenderer;
import org.jdesktop.swingx.tree.DefaultXTreeCellRenderer;

public class JXMaintananceTree extends JXTree {

private static final long serialVersionUID = -4118213619140974890L;
private static final Logger LOG = Logger.getLogger(JXMaintananceTree.class.getName());

public JXMaintananceTree(TreeModel newModel) {
super(newModel);
}

@Override
public TreeCellRenderer getCellRenderer() {
StringValue sv = (Object value) -> {
if(value==null) return StringValues.TO_STRING.getString(value);
if(value instanceof MTreeNode mTreeNode) return StringValues.TO_STRING.getString(mTreeNode.getName());
// if(value instanceof MusicTreeModel.MusicEntry
// || value instanceof MusicTreeModel.Album
// || value instanceof MusicTreeModel.Song
// ) {
// return StringValues.TO_STRING.getString(value);
// }
String simpleName = value.getClass().getSimpleName();
return simpleName + "(" + value + ")";
};
return new TreeDelegatingRenderer(null, null, sv);
}

// class DelegatingRenderer extends DefaultTreeRenderer implements TreeCellRenderer, RolloverRenderer {
class TreeDelegatingRenderer extends DefaultTreeRenderer implements TreeCellRenderer, RolloverRenderer {

private Icon closedIcon = null;
private Icon openIcon = null;
private Icon leafIcon = null;
private TreeCellRenderer delegate = null;

public TreeDelegatingRenderer(TreeCellRenderer delegate, IconValue iv, StringValue delegateStringValue) {
// super(new WrappingProvider(iv, delegateStringValue));
// ==
super(new WrappingProvider(iv, delegateStringValue, false));
/* class WrappingProvider extends ComponentProvider<WrappingIconPanel>
* ctor WrappingProvider(iv, sv) ==> this(iconValue, delegateStringValue, true)
* == ctor WrappingProvider(IconValue iv, ComponentProvider<?> delegate, boolean unwrapUserObject)
* this(iv, (ComponentProvider<?>) null, unwrapUserObject);
* getWrappee().setStringValue(delegateStringValue);
*/
ComponentProvider<?> cp = getComponentProvider(); // member componentController in AbstractRenderer
WrappingProvider wp = (WrappingProvider)cp;
LOG.info("--- .ComponentProvider.Wrappee:"+wp.getWrappee());
if (delegate instanceof DefaultTreeCellRenderer javaxDTCR) {
initIcons(javaxDTCR);
setDelegateRenderer(delegate);
} else {
// initIcons(new DefaultTreeCellRenderer());
// EUG better DefaultXTreeCellRenderer extends DefaultTreeCellRenderer ?
initIcons(new DefaultXTreeCellRenderer());
}
}

private void initIcons(DefaultTreeCellRenderer renderer) {
closedIcon = renderer.getDefaultClosedIcon();
openIcon = renderer.getDefaultOpenIcon();
leafIcon = renderer.getDefaultLeafIcon();
}
private void updateIcons() {
if (!isOverwriteRendererIcons()) return;
setClosedIcon(closedIcon);
setOpenIcon(openIcon);
setLeafIcon(leafIcon);
}

public void setDelegateRenderer(TreeCellRenderer delegate) {
if (delegate == null) {
delegate = createDefaultCellRenderer();
}
this.delegate = delegate;
updateIcons();
}

@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
Component c = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
LOG.info("getTreeCellRendererComponent for "+(value==null?"":value.getClass())+" value "+value
+ " componentController/Provider:"+getComponentProvider()
+ "\n returns "+c);
if(c instanceof WrappingIconPanel wip) {
LOG.info("WrappingIconPanel JComponent delegate:"+wip.getComponent());
}
return c;
}

// @Override // interface RolloverRenderer
public boolean isEnabled() {
if(delegate instanceof RolloverRenderer rolloverRenderer) {
return rolloverRenderer.isEnabled();
}
return false;
}

@Override // interface RolloverRenderer
public void doClick() {
if (isEnabled()) {
((RolloverRenderer) delegate).doClick();
}
}

}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.jdesktop.swingx.demos.tree;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Frame;
import java.util.logging.Logger;
Expand All @@ -17,12 +16,11 @@

import org.jdesktop.swingx.JXComboBox;
import org.jdesktop.swingx.JXFrame;
import org.jdesktop.swingx.JXFrame.StartPosition;
import org.jdesktop.swingx.JXPanel;
import org.jdesktop.swingx.JXTree;
import org.jdesktop.swingx.JXFrame.StartPosition;
import org.jdesktop.swingx.renderer.StringValue;
import org.jdesktop.swingx.renderer.StringValues;
import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode;

import swingset.AbstractDemo;

Expand All @@ -49,7 +47,7 @@ public static void main(String[] args) {
frame.getContentPane().add(demo);
frame.pack();
frame.setVisible(true);

controller.getContentPane().add(demo.getControlPane());
controller.pack();
controller.setVisible(true);
Expand All @@ -67,7 +65,7 @@ public TreeMaintenancePanel(Frame frame) {
frame.setTitle(getBundleString("frame.title", DESCRIPTION));
super.setPreferredSize(PREFERRED_SIZE);
super.setBorder(new BevelBorder(BevelBorder.LOWERED));

preInit(); // // name wie in VTreeMaintenance
this.add(treeField, BorderLayout.PAGE_START);
this.add(panel, BorderLayout.CENTER);
Expand All @@ -86,44 +84,30 @@ private void preInit() {
});
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Tree root");
treeModel = new GossipTreeModel(root, true);
centerTree = new JXTree(treeModel) {
@Override
public TreeCellRenderer getCellRenderer() {
StringValue sv = (Object value) -> {
if(value instanceof MusicTreeModel.MusicEntry
|| value instanceof MusicTreeModel.Album
|| value instanceof MusicTreeModel.Song
) {
return StringValues.TO_STRING.getString(value);
}
String simpleName = value.getClass().getSimpleName();
return simpleName + "(" + value + ")";
};
return new JXTree.DelegatingRenderer(sv) {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
Component c = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
LOG.info("getTreeCellRendererComponent for "+(value==null?"":value.getClass())+" value "+value
+ " componentController/Provider:"+getComponentProvider()
+ "\n returns "+c);
return c;
}
};
}

};
centerTree = new JXMaintananceTree(treeModel);
centerTree.setRootVisible(true);
// centerTree.setEditable(true);
panel.add(new JScrollPane(centerTree), BorderLayout.CENTER);
}

private void action_loadTree(int treeID) {
treeModel.setRoot(null);
// treeModel.setRoot(null);
MTreeNode root = // mtree.getRootNode();
new MTreeNode(11, 0, "HQ", "description", 0, false, null, false, null);
new MTreeNode(0, 0, "GardenWorld Organization", "description", 0, true, null, false, null);
root.add(new MTreeNode(11, 0, "HQ", "description first child", 0, false, null, false, null));
root.add(new MTreeNode(50000, 1, "Furniture", "description child seqNo=1", 0, false, null, false, null));
// (int node_ID, int seqNo, String name, String description,
// int parent_ID, boolean isSummary, String imageIndicator, boolean onBar, Color color)

//21:17:16.649 MTreeNode.<init>: MTreeNode Node_ID=0, seqNo=0, Parent_ID=0, isSummary=true, imageIndicator=null - GardenWorld Organization [23]
//21:17:16.661 MTreeNode.<init>: MTreeNode Node_ID=11, seqNo=0, Parent_ID=0, isSummary=false, imageIndicator=null - HQ [23]
//21:17:16.661 MTreeNode.<init>: MTreeNode Node_ID=50000, seqNo=1, Parent_ID=0, isSummary=false, imageIndicator=null - Furniture [23]
//21:17:16.661 MTreeNode.<init>: MTreeNode Node_ID=50001, seqNo=2, Parent_ID=0, isSummary=false, imageIndicator=null - Fertilizer [23]
//21:17:16.661 MTreeNode.<init>: MTreeNode Node_ID=50007, seqNo=3, Parent_ID=0, isSummary=true, imageIndicator=null - Stores [23]
//21:17:16.662 MTreeNode.<init>: MTreeNode Node_ID=50006, seqNo=0, Parent_ID=50007, isSummary=false, imageIndicator=null - Store West [23]
//21:17:16.662 MTreeNode.<init>: MTreeNode Node_ID=50005, seqNo=1, Parent_ID=50007, isSummary=false, imageIndicator=null - Store East [23]
//21:17:16.662 MTreeNode.<init>: MTreeNode Node_ID=50004, seqNo=2, Parent_ID=50007, isSummary=false, imageIndicator=null - Store South [23]
//21:17:16.662 MTreeNode.<init>: MTreeNode Node_ID=50002, seqNo=3, Parent_ID=50007, isSummary=false, imageIndicator=null - Store North [23]
//21:17:16.662 MTreeNode.<init>: MTreeNode Node_ID=12, seqNo=4, Parent_ID=50007, isSummary=false, imageIndicator=null - Store Central [23]
treeModel.setRoot(root);
}

Expand All @@ -147,7 +131,4 @@ public GossipTreeModel(TreeNode root, boolean asksAllowsChildren) {
}
}

// class MTreeNode extends DefaultMutableTreeTableNode { // implements NodeModel {
//
// }
}

0 comments on commit 009c227

Please sign in to comment.