我如何创建一个JavaSwingJTable,头作为第一列,而不是第一行?
我正在使用Java6.0+Swing+JTable 通常,JTable将标题呈现为第一行。(左图) 但是,我希望将标题呈现为第一列。(右图) 我不认为这是JTable中的一个简单标志 您能推荐一种方法或现有的小部件库吗 我假设我需要重写JTableHeader和JTable的paint()方法 谢谢我如何创建一个JavaSwingJTable,头作为第一列,而不是第一行?,java,swing,header,jtable,transpose,Java,Swing,Header,Jtable,Transpose,我正在使用Java6.0+Swing+JTable 通常,JTable将标题呈现为第一行。(左图) 但是,我希望将标题呈现为第一列。(右图) 我不认为这是JTable中的一个简单标志 您能推荐一种方法或现有的小部件库吗 我假设我需要重写JTableHeader和JTable的paint()方法 谢谢 哎呀,不要介意你想要一个转置的表格模型,而不仅仅是行标题 请参见您可以使用TableModel来实现这一点,您应该在getColumnClass中返回一个特定的类,使用渲染器将其绘制为标题列。而且
哎呀,不要介意你想要一个转置的表格模型,而不仅仅是行标题
请参见您可以使用TableModel来实现这一点,您应该在getColumnClass中返回一个特定的类,使用渲染器将其绘制为标题列。而且,您可能会将getValueAt设置为垂直 这并不简单,但却是可能的
当我发布它时,您发布的图像是不可见的,对于您的情况,您应该使用CellRenderer使其像标题一样,但它仍然在TableModel上。这样如何,您基本上覆盖了getValueAt(int行,int列)。下面是一个测试类:
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);
}
}
我也有同样的问题。这是我的实现。我有一个固定的报头数组,还有一个2d数组用于我的其余数据,它是通过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);
}
}
import javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableModel;
公开课考试{
公共静态void main(字符串[]argv)引发异常{
DefaultTableModel=新的DefaultTableModel();
JTable table=新的JTable(模型);
model.addColumn(“标题”);
String[]headers={//如果希望将headers数组与columns数组分开
“标题1”,
“标题2”,
“标题3”
};
字符串[][]列数据=新字符串[][]{
{
“第1.1栏”,
“第1.2栏”,
“第1.3栏”
},{
“第2.1栏”,
“第2.2栏”,
“第2.3栏”
},{
“第3.1栏”,
“第3.2栏”,
“第3.3栏”
}
};
for(int col=1;col