想做一个参数配置界面,需要进行树状管理。想要将参数作为叶子几点进行配置。看来下书上的介绍。
也找网上的相关文章参考了一下。效果基本是出来了,但是实际使用感受不理想。想要修改参数时很难用。
如有那位肯不吝指教,非常感谢~
效果图如下:
代码如下:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package tree; import java.awt.Component; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTree; import javax.swing.table.AbstractTableModel; import javax.swing.tree.*; /** * * @author HuFeiyan */ public class JTableTree extends JScrollPane { public static void main(String[] args) { JFrame frame = new JFrame("TreeTableSample"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTableTree tree = new JTableTree(); frame.add(tree); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } public JTableTree() { TreeNode rootNode = createNodes(); tree = new JTree(rootNode); tree.setCellRenderer(new TreeTableCellRenderer()); tree.setCellEditor(new TreeTableCellEditor(tree, new DefaultTreeCellRenderer())); tree.setEditable(true); setViewportView(tree); } private TreeNode createNodes() { DefaultMutableTreeNode root; DefaultMutableTreeNode grandparent; DefaultMutableTreeNode parent; DefaultMutableTreeNode child; root = new DefaultMutableTreeNode("Link Set"); grandparent = new DefaultMutableTreeNode("Diameter"); root.add(grandparent); // MyData ud1 = new MyData(new String[][]{{"L1P1", "L1V1"}, {"L1P2", "L1V2"}, {"L1P3", "L1V3"}}); MyTableModel m1 = new MyTableModel(ud1.getData()); JTable t1 = new JTable(m1); child = new DefaultMutableTreeNode(t1); parent = new DefaultMutableTreeNode(ud1); parent.add(child); grandparent.add(parent); MyData ud2 = new MyData(new String[][]{{"L2P1", "L2V1"}, {"L2P2", "L2V2"}, {"L2P3", "L2V3"}}); MyTableModel m2 = new MyTableModel(ud2.getData()); JTable t2 = new JTable(m2); child = new DefaultMutableTreeNode(t1); parent = new DefaultMutableTreeNode(ud2); parent.add(child); grandparent.add(parent); return root; } public JTree tree; public JTable cellTable; } class MyData { String[][] data; public MyData(String[][] object) { data = object; } @Override public String toString() { String result = ""; for (String[] a : data) { result += "["; for (String b : a) { result += b; } result += "]"; } return result; } public String[][] getData() { return data; } } class MyTableModel extends AbstractTableModel { private Object[][] data; public MyTableModel(String[][] data) { this.data = data; } @Override public int getColumnCount() { return 2; } @Override public int getRowCount() { return data.length; } @Override public Object getValueAt(int row, int col) { return data[row][col]; } @Override public boolean isCellEditable(int row, int col) { if (col < 1) { return false; } else { return true; } } @Override public void setValueAt(Object value, int row, int col) { data[row][col] = value; fireTableCellUpdated(row, col); } } class TreeTableCellRenderer extends DefaultTreeCellRenderer { JTable table; @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; Object ud = node.getUserObject(); if (!(ud instanceof JTable) || !leaf) { System.out.println(ud); return super.getTreeCellRendererComponent(tree, value, leaf, expanded, leaf, row, hasFocus); } return (JTable) ud; } } class TreeTableCellEditor extends DefaultTreeCellEditor { JTable table; @Override public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; Object ud = node.getUserObject(); if (!(ud instanceof JTable) || !leaf) { System.out.println(ud); return super.getTreeCellEditorComponent(tree, value, isSelected, expanded, leaf, row); } return (JTable) ud; } public TreeTableCellEditor(JTree tree, DefaultTreeCellRenderer renderer, TreeCellEditor editor) { super(tree, renderer, editor); } public TreeTableCellEditor(JTree tree, DefaultTreeCellRenderer renderer) { super(tree, renderer); } }