JTree及JTable學習,在JTree中嵌套JTable的例子。

來源:互聯網
上載者:User

想做一個參數配置介面,需要進行樹狀管理。想要將參數作為葉子幾點進行配置。看來下書上的介紹。

也找網上的相關文章參考了一下。效果基本是出來了,但是實際使用感受不理想。想要修改參數時很難用。

如有那位肯不吝指教,非常感謝~

如下:

代碼如下:

/* * 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);    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.