如何做出一个复杂的JTree模型?以下是一个关于JTree构建模型的例子,代码贴出来如下:package?day18_JTreeim
如何做出一个复杂的JTree模型?
以下是一个关于JTree构建模型的例子,代码贴出来如下:
package?day18_JTree;
import?java.awt.*;
import?java.awt.event.*;
import?javax.swing.*;
import?javax.swing.tree.*;
class?TreeEditFrame?extends?JFrame?implements?ActionListener?
{
????private?static?final?long?serialVersionUID?=?1L;
????private?DefaultTreeModel?model;
????private?JTree?tree;
????private?JButton?addSiblingButton;
????private?JButton?addChildButton;
????private?JButton?deleteButton;
????
????public?TreeEditFrame()?
{
????????setTitle("TreeEditTest");
????????setSize(300,?200);
????????this.pack();
????????this.setSize(500,200);
????????Toolkit?tool?=?Toolkit.getDefaultToolkit();
????????double?width?=?tool.getScreenSize().getWidth();
????????double?height?=?tool.getScreenSize().getHeight();
????????this.setLocation(((int)(width-this.getWidth()))/2,(int)(height-this.getHeight())/2);
????????this.setVisible(true);
????????this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
????????TreeNode?root?=?makeSampleTree();
????????model?=?new?DefaultTreeModel(root);
????????tree?=?new?JTree(model);
????????DefaultTreeCellRenderer?renderer=new?DefaultTreeCellRenderer();
????????renderer.setLeafIcon(new?ImageIcon("1.gif"));
????????renderer.setClosedIcon(new?ImageIcon("2.gif"));
????????renderer.setOpenIcon(new?ImageIcon("3.gif"));
????????//renderer.setBackgroundNonSelectionColor(Color.BLUE);
????????//renderer.setBackgroundSelectionColor(Color.RED);
????????renderer.setBorderSelectionColor(Color.RED);
????????tree.setCellRenderer(renderer);
????????Container?contentPane?=?getContentPane();
????????JScrollPane?scrollPane?=?new?JScrollPane(tree);
????????contentPane.add(scrollPane,?"Center");
????????JPanel?panel?=?new?JPanel();
????????addSiblingButton?=?new?JButton("Add???Sibling");
????????addSiblingButton.addActionListener(this);
????????panel.add(addSiblingButton);
????????addChildButton?=?new?JButton("Add???Child");
????????addChildButton.addActionListener(this);
????????panel.add(addChildButton);
????????deleteButton?=?new?JButton("Delete");
????????deleteButton.addActionListener(this);
????????panel.add(deleteButton);
????????contentPane.add(panel,?"South");
????}
????public?TreeNode?makeSampleTree()?
{
????????DefaultMutableTreeNode?root?=?new?DefaultMutableTreeNode("World");
????????DefaultMutableTreeNode?country?=?new?DefaultMutableTreeNode("USA");
????????root.add(country);
????????DefaultMutableTreeNode?state?=?new?DefaultMutableTreeNode("California");
????????country.add(state);
????????DefaultMutableTreeNode?city?=?new?DefaultMutableTreeNode("San???Jose");
????????state.add(city);
????????city?=?new?DefaultMutableTreeNode("Cupertino");
????????state.add(city);
????????state?=?new?DefaultMutableTreeNode("Michigan");
????????country.add(state);
????????city?=?new?DefaultMutableTreeNode("Ann???Arbor");
????????state.add(city);
????????country?=?new?DefaultMutableTreeNode("Germany");
????????root.add(country);
????????state?=?new?DefaultMutableTreeNode("Schleswig-Holstein");
????????country.add(state);
????????city?=?new?DefaultMutableTreeNode("Kiel");
????????state.add(city);
????????return?root;
????}
????public?void?actionPerformed(ActionEvent?event)?
{
????????DefaultMutableTreeNode?selectedNode?=?(DefaultMutableTreeNode)?tree
????????.getLastSelectedPathComponent();
????????if?(selectedNode?==?null)
????????????return;
????????if?(event.getSource().equals(deleteButton))?
{
????????????if?(selectedNode.getParent()?!=?null)
????????????????model.removeNodeFromParent(selectedNode);
????????????return;
????????}
????????DefaultMutableTreeNode?newNode?=?new?DefaultMutableTreeNode("New");
????????if?(event.getSource().equals(addSiblingButton))?
{
????????????DefaultMutableTreeNode?parent?=?(DefaultMutableTreeNode)?selectedNode
????????????.getParent();
????????????if?(parent?!=?null)?
{
????????????????int?selectedIndex?=?parent.getIndex(selectedNode);
????????????????model.insertNodeInto(newNode,?parent,?selectedIndex?+?1);
????????????}
????????}?else?if?(event.getSource().equals(addChildButton))?
{
????????????model.insertNodeInto(newNode,?selectedNode,?selectedNode
????????????????????.getChildCount());
????????}
????????TreeNode[]?nodes?=?model.getPathToRoot(newNode);
????????TreePath?path?=?new?TreePath(nodes);
????????tree.scrollPathToVisible(path);
????}
}?
public?class?TreeEditTest?
{
????public?static?void?main(String[]?args)?
{
????????JFrame?frame?=?new?TreeEditFrame();
????????frame.show();
????}
}
截图: