ここからスイングコンポーネントを使用してツリーテーブルを作成するチュートリアルを見つけました。動的にフィードするように少し変更しました。その時点で、テーブルとツリーの行に目的のテキストを入力できます。今、私はそれを調べて使用したいと思いますsetValueAt(Object value,int column,int row)
。各行ヘッダーの名前を列ヘッダーの名前と比較したいのですが、一致するたびに、その特定のセルに値を入れて色を変更したいと思います。どうすればそれができるか提案はありますか?列と行を比較する機能を得るために変更されると思われる3つの主要なクラスを配置しました。
import javax.swing.tree.TreeModel;
public interface MyTreeTableModel extends TreeModel {
/**
* Returns the number of available columns.
* @return Number of Columns
*/
public int getColumnCount();
/**
* Returns the column name.
* @param column Column number
* @return Column name
*/
public String getColumnName(int column);
/**
* Returns the type (class) of a column.
* @param column Column number
* @return Class
*/
public Class<?> getColumnClass(int column);
/**
* Returns the value of a node in a column.
* @param node Node
* @param column Column number
* @return Value of the node in the column
*/
public Object getValueAt(Object node, int column);
/**
* Check if a cell of a node in one column is editable.
* @param node Node
* @param column Column number
* @return true/false
*/
public boolean isCellEditable(Object node, int column);
/**
* Sets a value for a node in one column.
* @param aValue New value
* @param node Node
* @param column Column number
*/
public void setValueAt(Object aValue, Object node, int column);
}
セカンドクラス
import java.awt.Rectangle;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.tree.TreePath;
public class MyTreeTableModelAdapter extends AbstractTableModel {
JTree tree;
MyAbstractTreeTableModel treeTableModel;
public MyTreeTableModelAdapter(MyAbstractTreeTableModel treeTableModel, JTree tree) {
this.tree = tree;
this.treeTableModel = treeTableModel;
tree.addTreeExpansionListener(new TreeExpansionListener() {
public void treeExpanded(TreeExpansionEvent event) {
fireTableDataChanged();
}
public void treeCollapsed(TreeExpansionEvent event) {
fireTableDataChanged();
}
});
}
public int getColumnCount() {
return treeTableModel.getColumnCount();
}
public String getColumnName(int column) {
return treeTableModel.getColumnName(column);
}
public Class<?> getColumnClass(int column) {
return treeTableModel.getColumnClass(column);
}
public int getRowCount() {
return tree.getRowCount();
}
protected Object nodeForRow(int row) {
TreePath treePath = tree.getPathForRow(row);
return treePath.getLastPathComponent();
}
public Object getValueAt(int row, int column) {
return treeTableModel.getValueAt(nodeForRow(row), column);
}
public boolean isCellEditable(int row, int column) {
return treeTableModel.isCellEditable(nodeForRow(row), column);
}
public void setValueAt(Object value, int row, int column) {
treeTableModel.setValueAt(value, nodeForRow(row), column);
}
}
三等
import java.awt.Dimension;
import javax.swing.JTable;
import javax.swing.ToolTipManager;
public class MyTreeTable extends JTable {
private MyTreeTableCellRenderer tree;
public MyTreeTable(){
}
public void expandTree(){
for (int i = 0; i < tree.getRowCount(); i++) {
tree.expandRow(i);
}
}
public MyTreeTable(MyAbstractTreeTableModel treeTableModel) {
super();
// set JTree.
tree = new MyTreeTableCellRenderer(this, treeTableModel);
ToolTipManager.sharedInstance().registerComponent(tree);
setToolTipText("text");//ToolTip
//expands all nodes at tree
for (int i = 0; i < tree.getRowCount(); i++) {
tree.expandRow(i);
}
// set model.
super.setModel(new MyTreeTableModelAdapter(treeTableModel, tree));
// select tree and table at the same time
MyTreeTableSelectionModel selectionModel = new MyTreeTableSelectionModel();
tree.setSelectionModel(selectionModel); // For the tree
setSelectionModel(selectionModel.getListSelectionModel()); // For the table
// Renderer for Tree.
setDefaultRenderer(MyTreeTableModel.class, tree);
// Editor for TreeTable
setDefaultEditor(MyTreeTableModel.class, new MyTreeTableCellEditor(
tree, this));
// Grid .
setShowGrid(true);
// no space
setIntercellSpacing(new Dimension(0, 0));
//setValueAt("jjjj", 0, 0); not working
}
}