Java 6.0 + Swing + JTable を使用しています。
通常、JTable はヘッダーを最初の行としてレンダリングします。(左画像)
ただし、ヘッダーを最初の列としてレンダリングしたいと思います。(右画像)
これは JTable の単純なフラグではないと思います。
アプローチまたは既存のウィジェット ライブラリを推奨できますか?
JTableHeader と JTable の paint() メソッドをオーバーライドする必要があると思います。
ありがとう
行ヘッダーだけでなく、転置されたTableModelが必要であることを気にしないでください。
http://tips4java.wordpress.com/2008/11/18/row-number-table/を参照してください
TableModelを使用してこれを行うことができます。getColumnClassで特定のクラスを返し、レンダラーを使用してヘッダー列のようにペイントする必要があります。そしておそらく、getValueAtを垂直にするでしょう。
これは単純ではありませんが、可能です。
私が投稿したとき、投稿した画像は表示されませんでした。あなたの場合、CellRendererを使用してヘッダーのようにする必要がありますが、それでもTableModelにあります。
私は同じ問題を共有しています。これが私の実装です。固定されたヘッダー用の配列と、残りのデータ用の 2 次元配列があります。これは、json を介して入力されますが、ここでは関連も表示もされていません。これは、列レベルでの動的移入をサポートしていることに注意してください。
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Test {
public static void main(String[] argv) throws Exception {
DefaultTableModel model = new DefaultTableModel();
JTable table = new JTable(model);
model.addColumn("Header");
String[] headers = { //If you wish to separate the headers array from columns array
"Header 1",
"Header 2",
"Header 3"
};
String [][]columnData = new String[][]{
{
"Column 1.1",
"Column 1.2",
"Column 1.3"
},{
"Column 2.1",
"Column 2.2",
"Column 2.3"
},{
"Column 3.1",
"Column 3.2",
"Column 3.3"
}
};
for(int col=1;col<(columnData.length+1);col++){
model.addColumn("Col"+col);
}
for(int i=0;i<headers.length;i++){
model.addRow(new Object[] { headers[i] });
}
for(int r=0;r<columnData.length;r++){
for(int c=0;c<columnData[0].length;c++){
model.setValueAt(columnData[r][c],c,r+1);
}
}
JFrame f = new JFrame();
f.setSize(500, 300);
f.add(new JScrollPane(table));
f.setVisible(true);
}
}
出力は次のとおりです。
これはどうですか、基本的に getValueAt(int row, int column) をオーバーライドします。テストクラスは次のとおりです。
package so.pivot;
import javax.swing.JFrame;
import javax.swing.JTable;
public class Test extends JFrame{
public static void main(String[] args){
Test test = new Test();
String[] columnNames = {"First Name",
"Last Name",
"Sport",
"# of Years",
"Vegetarian"};
Object[][] data = {
{"Kathy", "Smith",
"Snowboarding", new Integer(5), new Boolean(false)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", "Brown",
"Pool", new Integer(10), new Boolean(false)}
};
JTable table = new JTable(data, columnNames){
@Override
public Object getValueAt(int row, int column){
return super.getValueAt(column, row);
}
};
test.add(table);
test.pack();
test.setVisible(true);
}
}