📄 s20.htm
字号:
<p> add(addButton);<br> add(removeButton);</p> <p> addButton.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> TreePath path = <br> selectionModel.getSelectionPath();</p> <p> MutableTreeNode parent, node = <br> (MutableTreeNode)path.getLastPathComponent();</p> <p> if(path.getPathCount() > 1)<br> parent = (MutableTreeNode)node.getParent();<br> else<br> parent = (MutableTreeNode)node;</p> <p> int index = parent.getIndex(node) + 1;</p> <p> String s = JOptionPane.showInputDialog(<br> Test.this,<br> "Enter a name for the new node:",<br> "New Tree Node",<br> JOptionPane.QUESTION_MESSAGE);</p> <p> MutableTreeNode newNode = <br> new DefaultMutableTreeNode(s);</p> <p> model.insertNodeInto(newNode, parent, index);<br> }<br> });<br> removeButton.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> TreePath path = <br> selectionModel.getSelectionPath();</p> <p> if(path.getPathCount() == 1) {<br> JOptionPane.showMessageDialog(ControlPanel.this,<br> "Can't remove root node!");<br> return;<br> }</p> <p> MutableTreeNode node = <br> (MutableTreeNode)path.getLastPathComponent();</p> <p> model.removeNodeFromParent(node);<br> }<br> });<br> }<br> }<br> public static void main(String args[]) {<br> GraphicJavaApplication.launch(new Test(), <br> "Tree Model Example",300,300,450,300);<br> }<br> }<br> class GraphicJavaApplication extends WindowAdapter {<br> public static void launch(final JFrame f, String title,<br> final int x, final int y, <br> final int w, int h) {<br> f.setTitle(title);<br> f.setBounds(x,y,w,h);<br> f.setVisible(true);</p> <p> f.setDefaultCloseOperation(<br> WindowConstants.DISPOSE_ON_CLOSE);</p> <p> f.addWindowListener(new WindowAdapter() {<br> public void windowClosed(WindowEvent e) {<br> System.exit(0);<br> }<br> });<br> }<br> }</p> <hr size="1" noshade> <p> 20.5 树选取</p> <p align="center"><b>例20-7 树选取模式</b></p> <hr noshade size="1"> import javax.swing.*;<br> import javax.swing.tree.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class Test extends JApplet {<br> JTree tree = new JTree();</p> <p> TreeSelectionModel selectionModel = tree.getSelectionModel();</p> <p> String modes[] = {<br> "CONTIGUOUS_TREE_SELECTION",<br> "DISCONTIGUOUS_TREE_SELECTION",<br> "SINGLE_TREE_SELECTION"<br> };<br> int modeIds[] = {<br> TreeSelectionModel.CONTIGUOUS_TREE_SELECTION,<br> TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION,<br> TreeSelectionModel.SINGLE_TREE_SELECTION,<br> };</p> <p> public void init() {<br> Container contentPane = getContentPane();</p> <p> contentPane.add(new ControlPanel(), BorderLayout.NORTH);<br> contentPane.add(new JScrollPane(tree), <br> BorderLayout.CENTER);<br> }<br> class ControlPanel extends JPanel {<br> JComboBox combo = new JComboBox();<br> JButton button = new JButton("clear selection");</p> <p> public ControlPanel() {<br> for(int i=0; i < modes.length; ++i) {<br> combo.addItem(modes[i]);<br> }<br> add(new JLabel("Selection Mode:"));<br> add(combo);<br> add(button);</p> <p> int initialMode = selectionModel.getSelectionMode();</p> <p> if(initialMode == modeIds[0])<br> combo.setSelectedIndex(0);<br> else if(initialMode == modeIds[1])<br> combo.setSelectedIndex(1);<br> else if(initialMode == modeIds[2])<br> combo.setSelectedIndex(2);</p> <p> combo.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> int index = combo.getSelectedIndex();<br> selectionModel.setSelectionMode(<br> modeIds[index]);<br> }<br> });<br> button.addActionListener(new ActionListener() {<br> public void actionPerformed(ActionEvent e) {<br> selectionModel.clearSelection();<br> }<br> });<br> }<br> }<br> }</p> <hr size="1" noshade> <p> 20.6 树单元绘制</p> <p> </p> <p> 20.6.1 DefaultTreeCellRenderer</p> <p> </p> <p align="center"><b>例20-8 使用DefaultTreeCellRenderer</b></p> <hr noshade size="1"> import javax.swing.*;<br> import javax.swing.tree.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class Test extends JApplet {<br> static private Icon <br> openFolder = new ImageIcon("button_lit.jpg"),<br> closedFolder = new ImageIcon("button.jpg"),<br> leafIcon = new ImageIcon("leaf.gif");</p> <p> public void init() {<br> JTree tree = new JTree();<br> JScrollPane scrollPane = new JScrollPane(tree);<br> DefaultTreeCellRenderer renderer = <br> new DefaultTreeCellRenderer();</p> <p> renderer.setClosedIcon(closedFolder);<br> renderer.setOpenIcon(openFolder);<br> renderer.setLeafIcon(leafIcon);<br> renderer.setFont(new Font("Serif", Font.ITALIC, 12));</p> <p> tree.setCellRenderer(renderer);<br> tree.setEditable(true);<br> getContentPane().add(scrollPane);<br> }<br> }</p> <hr size="1" noshade> <p align="center"><b>例20-9 用UIManager类设置树图标的缺省值</b></p> <hr noshade size="1"> import javax.swing.*;<br> import javax.swing.tree.*;<br> import java.awt.*;<br> import java.awt.event.*; <p>public class Test extends JApplet {<br> static private Icon <br> openFolder = new ImageIcon("button_lit.jpg"),<br> closedFolder = new ImageIcon("button.jpg"),<br> leafIcon = new ImageIcon("leaf.gif");</p> <p> public void init() {<br> UIManager.put("Tree.closedIcon", closedFolder);<br> UIManager.put("Tree.openIcon", openFolder);<br> UIManager.put("Tree.leafIcon", leafIcon);</p> <p> JTree tree = new JTree();<br> JScrollPane scrollPane = new JScrollPane(tree);</p> <p> getContentPane().add(scrollPane);<br> }<br> }</p> <hr size="1" noshade> <p align="center"><b>例20-10 扩展DefalutTreeCellRenderer</b></p> <hr noshade size="1"> import java.awt.*;<br> import java.awt.event.*;<br> import javax.swing.*;<br> import javax.swing.event.*;<br> import javax.swing.tree.*;<br> import java.io.File; <p>public class Test extends JFrame {<br> public Test() {<br> final JTree tree = new JTree(createTreeModel());<br> JScrollPane scrollPane = new JScrollPane(tree);<br> FileNodeRenderer renderer = new FileNodeRenderer();</p> <p> tree.setEditable(true);<br> tree.setCellRenderer(renderer);</p> <p> getContentPane().add(scrollPane, BorderLayout.CENTER);</p> <p> tree.addTreeExpansionListener(new TreeExpansionListener(){<br> public void treeCollapsed(TreeExpansionEvent e) {<br> }<br> public void treeExpanded(TreeExpansionEvent e) {<br> TreePath path = e.getPath();<br> FileNode node = (FileNode)<br> path.getLastPathComponent();</p> <p> if( ! node.isExplored()) {<br> DefaultTreeModel model = <br> (DefaultTreeModel)tree.getModel();</p> <p> node.explore();<br> model.nodeStructureChanged(node);<br> }<br> }<br> });<br> }<br> private DefaultTreeModel createTreeModel() {<br> File root = new File("E:/");<br> FileNode rootNode = new FileNode(root), node;</p> <p> rootNode.explore();<br> return new DefaultTreeModel(rootNode);<br> }<br> public static void main(String args[]) {<br> GJApp.launch(new Test(),"JTree File Explorer",<br> 300,300,450,400);<br> }<br> }<br> class FileNode extends DefaultMutableTreeNode {<br> private boolean explored = false, selected = false;</p> <p> public FileNode(File file) { <br> setUserObject(file); <br> }<br> public boolean getAllowsChildren() { return isDirectory(); }<br> public boolean isLeaf() { return !isDirectory(); }<br> public File getFile() { return (File)getUserObject(); }</p> <p> public void explore() { explore(false); }<br> public boolean isExplored() { return explored; }</p> <p> public void setSelected(boolean s) { selected = s; }<br> public boolean isSelected() { return selected; }</p> <p> public boolean isDirectory() {<br> File file = (File)getUserObject();<br> return file.isDirectory();<br> }<br> public String toString() {<br> File file = (File)getUserObject();<br> String filename = file.toString();<br> int index = filename.lastIndexOf("\\");</p> <p> return (index != -1 && index != filename.length()-1) ?
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -