demojtree.java
来自「精通NetBeans光盘源代码,很好很好的资料」· Java 代码 · 共 347 行
JAVA
347 行
/*
* DemoJTree.java
*
* Created on 2006年4月2日, 下午1:17
*/
package org.netbeans.swing.tree;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
/**
*
* @author boyingking
*/
public class DemoJTree extends javax.swing.JFrame {
/**
* Creates new form DemoJTree
*/
public DemoJTree() {
initComponents();
initialTree();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
private void initComponents() {
jPopupMenuNode = new javax.swing.JPopupMenu();
jMenuItemAddNode = new javax.swing.JMenuItem();
jMenuItemDeleteNode = new javax.swing.JMenuItem();
jMenuItemChangeOpenIcon = new javax.swing.JMenuItem();
jMenuItemChangeCloseIcon = new javax.swing.JMenuItem();
jMenuItemLeafIcon = new javax.swing.JMenuItem();
jScrollPane2 = new javax.swing.JScrollPane();
jTreeCountry = new javax.swing.JTree();
jLabelMessage = new javax.swing.JLabel();
jMenuItemAddNode.setText("\u6dfb\u52a0\u8282\u70b9");
jMenuItemAddNode.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItemAddNodeActionPerformed(evt);
}
});
jPopupMenuNode.add(jMenuItemAddNode);
jMenuItemDeleteNode.setText("\u5220\u9664\u8282\u70b9");
jMenuItemDeleteNode.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItemDeleteNodeActionPerformed(evt);
}
});
jPopupMenuNode.add(jMenuItemDeleteNode);
jMenuItemChangeOpenIcon.setText("\u66f4\u6539\u5c55\u5f00\u8282\u70b9\u56fe\u6807");
jMenuItemChangeOpenIcon.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItemChangeOpenIconActionPerformed(evt);
}
});
jPopupMenuNode.add(jMenuItemChangeOpenIcon);
jMenuItemChangeCloseIcon.setText("\u66f4\u6539\u6298\u53e0\u8282\u70b9\u56fe\u6807");
jMenuItemChangeCloseIcon.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItemChangeCloseIconActionPerformed(evt);
}
});
jPopupMenuNode.add(jMenuItemChangeCloseIcon);
jMenuItemLeafIcon.setText("\u66f4\u6539\u53f6\u8282\u70b9\u56fe\u6807");
jMenuItemLeafIcon.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItemLeafIconActionPerformed(evt);
}
});
jPopupMenuNode.add(jMenuItemLeafIcon);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("JTree\u7efc\u5408\u5e94\u7528");
jTreeCountry.setToolTipText("");
jTreeCountry.setModel(this.initialTreeModel());
jScrollPane2.setViewportView(jTreeCountry);
jLabelMessage.setBackground(new java.awt.Color(0, 0, 0));
jLabelMessage.setText("\u60a8\u8fd8\u6ca1\u6709\u4f5c\u51fa\u4efb\u4f55\u52a8\u4f5c");
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(10, 10, 10)
.add(jLabelMessage, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 192, Short.MAX_VALUE))
.add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 202, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
.add(jScrollPane2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 263, Short.MAX_VALUE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jLabelMessage, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 30, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void jMenuItemLeafIconActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemLeafIconActionPerformed
// TODO add your handling code here:
this.dealTheChangeIconEvent(evt);
}//GEN-LAST:event_jMenuItemLeafIconActionPerformed
private void jMenuItemChangeCloseIconActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemChangeCloseIconActionPerformed
// TODO add your handling code here:
this.dealTheChangeIconEvent(evt);
}//GEN-LAST:event_jMenuItemChangeCloseIconActionPerformed
private void jMenuItemChangeOpenIconActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemChangeOpenIconActionPerformed
// TODO add your handling code here:
this.dealTheChangeIconEvent(evt);
}//GEN-LAST:event_jMenuItemChangeOpenIconActionPerformed
private void jMenuItemDeleteNodeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemDeleteNodeActionPerformed
// TODO add your handling code here:
int confirm=JOptionPane.showConfirmDialog(this,"你确定要删除该节点吗?","提示:",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE);
if(confirm==JOptionPane.YES_OPTION)
{
DefaultMutableTreeNode parent=(DefaultMutableTreeNode)this.actionNode.getParent();
if(actionNode!=null)
{
if(parent==null)
{
JOptionPane.showMessageDialog(this,actionNode+"是根节点,不能删除!","警告",JOptionPane.WARNING_MESSAGE);
}
else
{
this.jLabelMessage.setText(actionNode+"被删除了!");
parent.remove(this.actionNode);
this.actionNode=null;
((DefaultTreeModel)this.jTreeCountry.getModel()).reload(parent);
}
}
}
}//GEN-LAST:event_jMenuItemDeleteNodeActionPerformed
private void jMenuItemAddNodeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemAddNodeActionPerformed
// TODO add your handling code here:
String nodeName=JOptionPane.showInputDialog(this,"请输入要添加的节点的名称","请输入:",JOptionPane.INFORMATION_MESSAGE);
if(nodeName!=null&&!nodeName.equals(""))
{
if(this.actionNode!=null)
{
DefaultMutableTreeNode newNode=new DefaultMutableTreeNode(nodeName);
actionNode.add(newNode);
((DefaultTreeModel)this.jTreeCountry.getModel()).reload(actionNode);
this.jTreeCountry.setRootVisible(true);
this.jTreeCountry.setExpandsSelectedPaths(true);
this.jLabelMessage.setText(newNode+"被添加");
}
}
}//GEN-LAST:event_jMenuItemAddNodeActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new DemoJTree().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel jLabelMessage;
private javax.swing.JMenuItem jMenuItemAddNode;
private javax.swing.JMenuItem jMenuItemChangeCloseIcon;
private javax.swing.JMenuItem jMenuItemChangeOpenIcon;
private javax.swing.JMenuItem jMenuItemDeleteNode;
private javax.swing.JMenuItem jMenuItemLeafIcon;
private javax.swing.JPopupMenu jPopupMenuNode;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTree jTreeCountry;
// End of variables declaration//GEN-END:variables
private void initialTree()
{
this.jTreeCountry.setEditable(true);
this.jTreeCountry.setShowsRootHandles(true);//设置树的根节点具有“门把手图标”
DealAction dealAction=new DealAction();
this.jTreeCountry.addTreeSelectionListener(dealAction);
this.jTreeCountry.addTreeExpansionListener(dealAction);
this.jTreeCountry.addMouseListener(new PopupAdapter(this.jPopupMenuNode));
}
private void dealTheChangeIconEvent(ActionEvent evt)
{
ImageIcon newIcon=this.chooserIcon();
DefaultTreeCellRenderer renderer=(DefaultTreeCellRenderer)this.jTreeCountry.getCellRenderer();
if(evt.getSource()==jMenuItemChangeOpenIcon)
{
renderer.setOpenIcon(newIcon);
}
else if(evt.getSource()==jMenuItemChangeCloseIcon)
{
renderer.setClosedIcon(newIcon);
}
else if(evt.getSource()==jMenuItemLeafIcon)
{
renderer.setLeafIcon(newIcon);
}
this.jTreeCountry.setCellRenderer(renderer);
((DefaultTreeModel)this.jTreeCountry.getModel()).reload();
}
private ImageIcon chooserIcon( )
{
ImageIcon tempIcon=null;
fileChooser.showOpenDialog(this);
File iconFile=fileChooser.getSelectedFile();
if(iconFile!=null)
{
ImageIcon newIcon=new ImageIcon(iconFile.getPath());
tempIcon=newIcon;
}
return tempIcon;
}
private DefaultMutableTreeNode actionNode=null;
private JFileChooser fileChooser=new JFileChooser();
private DefaultTreeModel initialTreeModel()
{
DefaultMutableTreeNode root=new DefaultMutableTreeNode("中国");
DefaultMutableTreeNode subRoot1=new DefaultMutableTreeNode("北京");
DefaultMutableTreeNode subRoot2=new DefaultMutableTreeNode("上海");
DefaultMutableTreeNode subRoot3=new DefaultMutableTreeNode("河北");
DefaultMutableTreeNode subRoot4=new DefaultMutableTreeNode("河南");
DefaultMutableTreeNode subRoot5=new DefaultMutableTreeNode("广东");
DefaultMutableTreeNode subRoot6=new DefaultMutableTreeNode("辽宁");
DefaultMutableTreeNode leaf1=new DefaultMutableTreeNode("唐山");
DefaultMutableTreeNode leaf2=new DefaultMutableTreeNode("廊坊");
DefaultMutableTreeNode leaf3=new DefaultMutableTreeNode("郑州");
DefaultMutableTreeNode leaf4=new DefaultMutableTreeNode("洛阳");
DefaultMutableTreeNode leaf5=new DefaultMutableTreeNode("广州");
DefaultMutableTreeNode leaf6=new DefaultMutableTreeNode("佛山");
DefaultMutableTreeNode leaf7=new DefaultMutableTreeNode("大连");
DefaultMutableTreeNode leaf8=new DefaultMutableTreeNode("沈阳");
root.add(subRoot1);
root.add(subRoot2);
root.add(subRoot3);
root.add(subRoot4);
root.add(subRoot5);
root.add(subRoot6);
subRoot3.add(leaf1);
subRoot3.add(leaf2);
subRoot4.add(leaf3);
subRoot4.add(leaf4);
subRoot5.add(leaf5);
subRoot5.add(leaf6);
subRoot6.add(leaf7);
subRoot6.add(leaf8);
DefaultTreeModel myDefaultTreeModel=new DefaultTreeModel(root);
myDefaultTreeModel.addTreeModelListener(new DealAction());
return myDefaultTreeModel;
}
class PopupAdapter extends MouseAdapter {
JPopupMenu popup;
PopupAdapter(JPopupMenu popupMenu) {
popup = popupMenu;
}
public void mousePressed(MouseEvent e) {
showPopupMenu(e);
}
public void mouseReleased(MouseEvent e) {
showPopupMenu(e);
}
private void showPopupMenu(MouseEvent e) {
if (e.isPopupTrigger()) {
popup.show(e.getComponent(),e.getX(), e.getY());
}
}
}
class DealAction implements TreeSelectionListener,TreeExpansionListener,TreeModelListener {
public void valueChanged(TreeSelectionEvent event1) {
TreePath tp=event1.getNewLeadSelectionPath();
if(tp!=null)
{
DefaultMutableTreeNode tempNode=(DefaultMutableTreeNode)tp.getLastPathComponent();
DemoJTree.this.jLabelMessage.setText("你选择了:"+ tempNode);
DemoJTree.this.actionNode= tempNode;
}
}
public void treeExpanded(TreeExpansionEvent event2) {
TreePath tp=event2.getPath();
DemoJTree.this.jLabelMessage.setText("你展开了:"+tp.getLastPathComponent()+"节点");
}
public void treeCollapsed(TreeExpansionEvent event3) {
TreePath tp=event3.getPath();
DemoJTree.this.jLabelMessage.setText("你将"+tp.getLastPathComponent()+"节点折叠");
}
public void treeNodesChanged(TreeModelEvent e) {
DemoJTree.this.jLabelMessage.setText("你更改了节点的内容");
}
public void treeNodesInserted(TreeModelEvent e) {}
public void treeNodesRemoved(TreeModelEvent e) {}
public void treeStructureChanged(TreeModelEvent e) {}
}//end DemoJTree
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?