📄 s20.htm
字号:
<br> filename.substring(index+1) : <br> filename;<br> }<br> public void explore(boolean force) {<br> if(!isExplored() || force) {<br> File file = getFile();<br> File[] children = file.listFiles();</p> <p> for(int i=0; i < children.length; ++i) <br> add(new FileNode(children[i]));</p> <p> explored = true;<br> }<br> }<br> }<br> class FileNodeRenderer extends DefaultTreeCellRenderer {<br> protected JCheckBox checkBox = new JCheckBox("backup");<br> private Component strut = Box.createHorizontalStrut(5);<br> private JPanel panel = new JPanel();</p> <p> public FileNodeRenderer() {<br> panel.setBackground(<br> UIManager.getColor("Tree.textBackground"));<br> <br> setOpaque(false);<br> checkBox.setOpaque(false);<br> panel.setOpaque(false);</p> <p> panel.setLayout(new FlowLayout(FlowLayout.CENTER,0,0));<br> panel.add(this);<br> panel.add(strut);<br> panel.add(checkBox);</p> <p> } <br> public Component getTreeCellRendererComponent(<br> JTree tree, Object value, <br> boolean selected, boolean expanded,<br> boolean leaf, int row, <br> boolean hasFocus) {<br> FileNode node = (FileNode)value;<br> String s = tree.convertValueToText(value, selected,<br> expanded, leaf, row, hasFocus);</p> <p> super.getTreeCellRendererComponent(<br> tree, value, selected, expanded,<br> leaf, row, hasFocus);</p> <p> checkBox.setVisible(node.isDirectory());<br> checkBox.setSelected(node.isSelected());</p> <p> return panel;<br> }<br> }<br> class GJApp extends WindowAdapter {<br> static private JPanel statusArea = new JPanel();<br> static private JLabel status = new JLabel(" ");</p> <p> 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> statusArea.setBorder(BorderFactory.createEtchedBorder());<br> statusArea.setLayout(new FlowLayout(FlowLayout.LEFT,0,0));<br> statusArea.add(status);<br> status.setHorizontalAlignment(JLabel.LEFT);</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> static public JPanel getStatusArea() {<br> return statusArea;<br> }<br> static public void updateStatus(String s) {<br> status.setText(s);<br> }<br> }</p> <hr size="1" noshade> <p align="center"><b>例20-11 把用户对象设置为货币模式</b></p> <hr noshade size="1"> import javax.swing.*;<br> import javax.swing.tree.*;<br> import java.awt.*;<br> import java.awt.event.*;<br> import java.text.*; <p>public class Test extends JApplet {<br> public void init() {<br> JTree tree = new JTree();<br> JScrollPane scrollPane = new JScrollPane(tree);</p> <p> DefaultMutableTreeNode root = <br> new DefaultMutableTreeNode("prices");</p> <p> root.add(new DefaultMutableTreeNode(new Double(10.99)));<br> root.add(new DefaultMutableTreeNode(new Double(8.99))); <br> root.add(new DefaultMutableTreeNode(new Double(6.95))); <br> root.add(new DefaultMutableTreeNode(new Double(8.00))); <br> root.add(new DefaultMutableTreeNode(new Double(7.59))); <br> root.add(new DefaultMutableTreeNode(new Double(2.49))); </p> <p> DefaultTreeModel model = <br> (DefaultTreeModel)tree.getModel();</p> <p> model.setRoot(root);</p> <p> tree.setCellRenderer(new FormattingRenderer());<br> tree.setEditable(true);<br> getContentPane().add(scrollPane);<br> }<br> }<br> class FormattingRenderer extends DefaultTreeCellRenderer {<br> public Component getTreeCellRendererComponent(<br> JTree tree, Object value, <br> boolean selected, boolean expanded,<br> boolean leaf, int row, <br> boolean hasFocus) {<br> // initialize renderer component (this) ...</p> <p> super.getTreeCellRendererComponent(<br> tree, value, selected, expanded, <br> leaf, row, hasFocus);</p> <p> // now format label text ...</p> <p> DefaultMutableTreeNode n = (DefaultMutableTreeNode)value;<br> Object userObject = n.getUserObject();</p> <p> if(userObject instanceof Double) { <br> Double d = (Double)userObject;<br> Format format = NumberFormat.getCurrencyInstance();</p> <p> setText(value == null ? "" : format.format(d));<br> }<br> return this;<br> }<br> }</p> <hr size="1" noshade> <p> 20.6.2 Metal界面样式</p> <p> </p> <p> 20.6.3 根结点和根句柄</p> <p> </p> <p align="center"><b>例20-12 显示根节点和根节点句柄</b></p> <hr noshade size="1"> import javax.swing.*;<br> import java.awt.*;<br> import java.awt.event.*;<br> import java.util.*; <p>public class Test extends JApplet {<br> JTree tree = new JTree();<br> public void init() {<br> Container contentPane = getContentPane();<br> JScrollPane scrollPane = new JScrollPane(tree);<br> contentPane.add(new ControlPanel(), BorderLayout.NORTH);<br> contentPane.add(scrollPane, BorderLayout.CENTER);<br> }<br> class ControlPanel extends JPanel{<br> JCheckBox showRoot = new JCheckBox("show root node");<br> JCheckBox showRootHandles = new JCheckBox(<br> "show root handle");<br> public ControlPanel(){<br> initializeCheckBoxes();<br> setLayout(new FlowLayout());<br> add(showRoot);<br> add(showRootHandles);<br> showRoot.addActionListener(new ActionListener(){<br> public void actionPerformed(ActionEvent e){<br> tree.setRootVisible(showRoot.isSelected());<br> }<br> });<br> showRootHandles.addActionListener(<br> new ActionListener(){<br> public void actionPerformed(ActionEvent e){<br> tree.setShowsRootHandles(<br> showRootHandles.isSelected());<br> }<br> });<br> }<br> private void initializeCheckBoxes(){<br> showRoot.setSelected(tree.isRootVisible());<br> showRootHandles.setSelected(<br> tree.getShowsRootHandles());<br> }<br> }<br> }</p> <p></p> <hr size="1" noshade> <p> 20.7 树单元编辑</p> <p> </p> <p align="center"> </p> <p> 20.7.1 扩展DefaultCellEditor</p> <p> </p> <p align="center"><b>例20-13 一个扩展DefaultCellEditor的编辑器</b></p> <hr noshade size="1"> import javax.swing.*;<br> import javax.swing.tree.*;<br> import java.awt.*;<br> import java.awt.event.*;<br> import java.util.*; <p>public class Test extends JApplet {<br> public void init() {<br> JTree tree = new JTree();<br> JScrollPane scrollPane = new JScrollPane(tree);<br> JComboBox combo = new JComboBox();</p> <p> combo.addItem("red");<br> combo.addItem("blue");<br> combo.addItem("green");<br> combo.addItem("orange");<br> combo.addItem("yellow");<br> combo.addItem("magenta");</p> <p> tree.setCellEditor(new ColorEditor(tree, combo));<br> tree.setEditable(true);</p> <p> getContentPane().add(scrollPane);<br> }<br> }<br> class ColorEditor extends DefaultCellEditor {<br> private JTree tree;</p> <p> public ColorEditor(JTree tree, JComboBox comboBox) {<br> super(comboBox);<br> this.tree = tree;<br> }<br> public boolean isCellEditable(EventObject e) {<br> boolean rv = false; // return value</p> <p> if(e instanceof MouseEvent) {<br> MouseEvent me = (MouseEvent)e;</p> <p> if(me.getClickCount() == 3) {<br> TreePath path =<br> tree.getPathForLocation(me.getX(), me.getY()); </p> <p> if(path.getPathCount() == 1) // root node<br> return false;</p> <p> DefaultMutableTreeNode node = <br> (DefaultMutableTreeNode)<br> path.getLastPathComponent(); <br> <br> rv = node.getParent().toString().equals("colors");<br> }<br> }<br> return rv;<br> }<br> }</p> <hr size="1" noshade> <p> 20.7.2 DefaultTreeCellEditor</p> <p> </p> <p align="center"><b>例20-14 使用DefaultTreeCellEditor</b></p> <hr noshade size="1"> import javax.swing.*;<br> import javax.swing.tree.*;<br> import java.awt.*;<br> import java.awt.event.*;<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -