[英]Jtable with expandable jtable for each row
我正在嘗試獲取一個表,您可以在其中使用+或任何符號折疊行,如Access中的此圖像:
實際上,我希望具有相同的行為,並具有類似列的標題。 我將僅使用2個級別:具有+的級別和不具有+的級別(具有不同孩子的不同父母,但孩子不會成為父母)。 目前,我正在Jtree中嘗試Jtable,但距離目標還很遠,結果也不盡如人意。我無法編輯表單元格,也無法擁有像這種情況下的列名(如果我將列標題放在每個父母都有標題)。 您是否知道某些Java swing組件的行為類似於我想要獲得的行為或某些可以執行此操作的代碼? 我寫的代碼有幫助嗎?
import java.awt.BorderLayout;
import java.awt.Component;
import java.util.EventObject;
// www .ja va 2s . c o m
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTree;
import javax.swing.ListSelectionModel;
import javax.swing.event.CellEditorListener;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellEditor;
import javax.swing.tree.TreeCellRenderer;
public class main extends JFrame {
private JTree tree;
public main() {
DefaultMutableTreeNode AA1 = new DefaultMutableTreeNode("AA1");
DefaultMutableTreeNode AA2 = new DefaultMutableTreeNode("AA2");
DefaultMutableTreeNode A = new DefaultMutableTreeNode("A");
A.add(AA1);
A.add(AA2);
DefaultMutableTreeNode BB1 = new DefaultMutableTreeNode("BB1");
DefaultMutableTreeNode BB2 = new DefaultMutableTreeNode("BB2");
DefaultMutableTreeNode B = new DefaultMutableTreeNode("B");
B.add(BB1);
B.add(BB2);
DefaultMutableTreeNode CC1 = new DefaultMutableTreeNode("CC1");
DefaultMutableTreeNode CC2 = new DefaultMutableTreeNode("CC2");
DefaultMutableTreeNode C = new DefaultMutableTreeNode("C");
C.add(CC1);
C.add(CC2);
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
root.add(A);
root.add(B);
root.add(C);
tree = new JTree(root);
tree.setRootVisible(false);
tree.setShowsRootHandles(true);
for (int i = 0; i<tree.getRowCount(); i++){
tree.expandRow(i);
}
tree.setCellRenderer(new MyTableInTreeCellRenderer());
tree.setRowHeight(0);
JScrollPane jsp = new JScrollPane(tree);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(jsp, BorderLayout.CENTER);
pack();
}
public static void main(String[] args) throws Exception {
new main().setVisible(true);
}
}
class MyTableInTreeCellRenderer extends JPanel implements TreeCellRenderer {
private JTable table;
public MyTableInTreeCellRenderer() {
super(new BorderLayout());
table = new JTable();
JScrollPane scrollPane = new JScrollPane(table);
table.setTableHeader(null);
table.setAutoCreateRowSorter(true);
table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
table.setCellSelectionEnabled(true);
table.setColumnSelectionAllowed(true);
//No column ordering. Must be before setModel
table.setColumnModel(new DefaultTableColumnModel() {
/**
*
*/
private static final long serialVersionUID = 5;
public void moveColumn(int columnIndex, int newIndex) {
super.moveColumn(columnIndex, columnIndex);
}
});
add(scrollPane);
}
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
final String v = (String) ((DefaultMutableTreeNode) value).getUserObject();
table.setModel(new DefaultTableModel() {
@Override
public int getRowCount() {
return 1;
}
@Override
public int getColumnCount() {
return 3;
}
@Override
public Object getValueAt(int row, int column) {
return v + ":" + row + ":" + column;
}
});
table.setPreferredScrollableViewportSize(table.getPreferredSize());
return this;
}
}
對於那些尋找類似東西的人,我發現了這一點:
http://www.hameister.org/JavaSwingTreeTable.html
如果要使用swingX,我發現的每個鏈接都將斷開(java.net不再存在),而且我也找不到正式的存儲庫。 但是,您仍然可以在幾個github個人項目中找到SwingX項目的最后一個上載,他們像這樣復制了它:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.