想做一個參數配置界面,需要進行樹狀管理。想要將參數作爲葉子幾點進行配置。看來下書上的介紹。
也找網上的相關文章參考了一下。效果基本是出來了,但是實際使用感受不理想。想要修改參數時很難用。
如有那位肯不吝指教,非常感謝~
效果圖如下:
代碼如下:
/*
* 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);
}
}