📄 demotree.java
字号:
package com.icbcsdc.ddlexp.ui.model;
import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class DemoTree extends JFrame implements ActionListener
{
pv.jfcx.JPVTreeView m_tree;
int m_clr = 0;
//--------------------
public DemoTree()
{
super("JPVTree with Drag-And-Drop");
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
Container panel = getContentPane();
// panel.setLayout(null);//设置为NULL表示按照固定尺寸显示
//-------------------------------
m_tree = buildPVTree();
// m_tree2 = new pv.jfcx.JPVTreeView();
// m_tree3 = buildPVTree2();
//-------------------------------
// m_tree2.setDemoNodes(true);
// m_tree2.getTree().setSelectionRow(3);
// m_tree2.getRoot().setUserObject("Drop is Enabled");
// m_tree2.setEnableDrop(true);
//-------------------------------
// create listener to JPVTree and add it to trees
// pv.jfcx.PVTreeListener ls = buildListener();
// m_tree.addAllListeners(ls);
//-------------------------------
// add trees to frame
m_tree.setSize(300,300);
//m_tree.setBounds(12, 100, 250, 290);
panel.add(m_tree);
//-------------------------------
// set background images (they painted only if opaque is disabled)
// m_tree.m_image = backImage();
//or m_tree.m_image = pv.util.PVImage.file(this, "e:/Tree/Images/pv.gif");
m_tree.setOpaque(true);
//-------------------------------
init0();
//-------------------------------
// expand some nodes
// NOTE:
// If it is done before tree has been completely
// initialyzed, then TreeUI may reset structure of tree
// nodes to the "DEFAULT" defined by a particular UI.
m_tree.getTree().expand(m_tree.getTree().nodeAt(1));
m_tree.getTree().expand(m_tree.getTree().nodeAt(4));
}
/*
//事件响应
//--------------------
// create listener to JPVTree events
pv.jfcx.PVTreeListener buildListener()
{
//-----------------------------
// all method-implementations in class below are optional
return new pv.jfcx.PVTreeListener()
{
//--------------------------
// implementation of the tree selection listener
public void valueChanged(TreeSelectionEvent e)
{
pv.jfcx.PVNode n = (pv.jfcx.PVNode)e.getPath().getLastPathComponent();
String s = n.toString();
//-----------------------
// check if this event is triggered by check-box/radio-button
if(!e.isAddedPath() && e.getOldLeadSelectionPath() == null &&
e.getNewLeadSelectionPath() == null)
s += " <BOX=" + n.isChecked() + ">";
show(s, 0);
}
//--------------------------
// implementation of the tree expansion listener
public void treeExpanded(TreeExpansionEvent e)
{ show("expanded: " + e.getPath().getLastPathComponent(), 1); }
public void treeCollapsed(TreeExpansionEvent e)
{ show("collapsed: " + e.getPath().getLastPathComponent(), 1); }
//--------------------------
// implementation of the tree model listener
public void treeNodesChanged(TreeModelEvent e)
{ show("Nodes Changed", 2); }
public void treeNodesInserted(TreeModelEvent e)
{ show("Nodes Inserted", 2); }
public void treeNodesRemoved(TreeModelEvent e)
{ show("Nodes Removed", 2); }
public void treeStructureChanged(TreeModelEvent e)
{
//System.out.println("StructureChanged " + e);
}
public int beforeInsertKey(pv.jfcx.PVTreeEvent e)
{
//System.out.println("beforeInsert");
return super.beforeInsertKey(e);
}
public int beforeDeleteKey(pv.jfcx.PVTreeEvent e)
{
//System.out.println("beforeDelete");
return super.beforeDeleteKey(e);
}
public int startDrag(pv.jfcx.PVTreeEvent e)
{
show((String)e.nodeSource.getUserObject(), 3);
show("", 4);
show("", 5);
return super.startDrag(e); // pv.jfcx.PVTreeEvent.ALLOW_DRAG_DROP;
}
public int dragOver(pv.jfcx.PVTreeEvent e)
{
String style = ((e.modifiers & InputEvent.CTRL_MASK) == 0) ? " (move)" : " (copy)";
show("\"" + (String)e.nodeSource.getUserObject() +
"\", OVER \"" + (String)e.nodeTarget.getUserObject() + "\"" + style, 4);
return super.dragOver(e); // pv.jfcx.PVTreeEvent.ALLOW_DRAG_DROP;
}
public int beforeDrop(pv.jfcx.PVTreeEvent e)
{
String style = ((e.modifiers & InputEvent.CTRL_MASK) == 0) ? "MOVE \"" : "COPY \"";
show(style + (String)e.nodeSource.getUserObject() +
"\", TO \"" + (String)e.nodeTarget.getUserObject() + "\"", 5);
return super.beforeDrop(e); // pv.jfcx.PVTreeEvent.ALLOW_DRAG_DROP;
}
public void afterDrop(pv.jfcx.PVTreeEvent e)
{
//System.out.println("afterDrop OF: " + e.nodeSource.getUserObject() + ", TO: " + e.nodeTarget.getUserObject());
}
};
}
*/
//-------------------------
// close application
protected void processWindowEvent(WindowEvent e)
{
super.processWindowEvent(e);
if(e.getID() == WindowEvent.WINDOW_CLOSING)
System.exit(0);
}
//--------------------
// listen to button events
public void actionPerformed(ActionEvent e)
{
}
//--------------------
// draw background image
Object backImage()
{
return new Icon()
{
public void paintIcon(Component c, Graphics g, int x, int y)
{
Rectangle r = c.getBounds();
((pv.jfcx.PVPanel)c).adjustRect(r, false);
r.x = r.width;
r.width = (r.width - 10) / 4;
r.height = (r.height - 20) / 4;
x += 5;
y += 10;
for(int j = 0; j < 3; j++)
{
g.setColor(new Color(0xffc0c0c0 | (0xff << (2 - j) * 8)));
g.fillOval(x + r.width * j, y + r.height * j, r.width * 2, r.height * 2);
}
g.setFont(new Font("Arial", Font.BOLD | Font.ITALIC, r.width));
String s = "Image!";
x += (r.x - getFontMetrics(g.getFont()).stringWidth(s)) / 2;
g.setColor(Color.white);
y += r.height * 2;
g.drawString(s, x + 2, y + 2);
g.setColor(c.getBackground());
g.drawString(s, x, y);
}
public int getIconWidth(){return 0;}
public int getIconHeight(){return 0;}
};
}
//-------------------
// create JPVTreeView
pv.jfcx.JPVTreeView buildPVTree()
{
//-------------------
// next line is an example for custom node-renderer
//pv.jfcx.JPVTreeView tree = new pv.jfcx.JPVTreeView(new MyTree());
//-------------------
// next 4 lines show an example for a checkbox on the root node
/*
MyNode rootNode = new MyNode("Root as CheckBox", false);
rootNode.setImageAt(new ImageIcon("e:/Tree/Images/cdrom.gif"), 0);
rootNode.setButton(1, true);
pv.jfcx.JPVTreeView tree = new pv.jfcx.JPVTreeView(rootNode);
*/
pv.jfcx.JPVTreeView tree = new pv.jfcx.JPVTreeView();
tree.setKeepMetalUI(true);
//tree.setShadow(1);
//tree.setShadowWidth(10);
tree.setBorderStyle(pv.util.PVBorder.SUNKEN + 7);
tree.setBorderColor(new Color(0xff80c080));
tree.setExpandedIcon(new ImageIcon("e:/minus.gif"));//e:/Tree/Images/minus.gif
tree.setCollapsedIcon(new ImageIcon("e:/plus.gif"));//e:/Tree/Images/plus.gif
tree.setEnableInsertKey(true);
tree.setEnableDeleteKey(true);
tree.setEnableDrag(true);
tree.setEnableDrop(true);
//-------------------------------
// Set dynamic tree-images.
tree.setLAF_Images(false);
tree.setLeafStyle(8);
tree.setFocusBorder(2);
tree.setFocusBorderColor(new Color(0xff000080));
tree.setTreeBackground(new Color(0xffc0ffc0));
tree.setFocusForeground(new Color(0xfffff3));
tree.setFocusBackground(new Color(0xab0000));
tree.setSelectionForeground(new Color(0x00f7f7));
tree.setSelectionBackground(new Color(0xf470c7));
tree.setEditable(true);
//-------------------------------
// fill up tree
pv.jfcx.PVNode root = tree.getRoot();
root.setUserObject("Drag & Drop are Enabled");
pv.jfcx.PVNode one = new pv.jfcx.PVNode("CheckBox & Radio");
one.setButton(1, true);
pv.jfcx.PVNode two = new MyNode("Custom flat, image", true);
two.setImageAt(new ImageIcon("e:/Tree/Images/bell.gif"), 0);
two.setButton(1, true);
one.add(two);
two = new MyNode("Custom 3D, image", false);
two.setImageAt(new ImageIcon("e:/Tree/Images/cdrom.gif"), 0);
two.setButton(1, true);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -