Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何创建一个JavaSwingJTable,头作为第一列,而不是第一行?_Java_Swing_Header_Jtable_Transpose - Fatal编程技术网

我如何创建一个JavaSwingJTable,头作为第一列,而不是第一行?

我如何创建一个JavaSwingJTable,头作为第一列,而不是第一行?,java,swing,header,jtable,transpose,Java,Swing,Header,Jtable,Transpose,我正在使用Java6.0+Swing+JTable 通常,JTable将标题呈现为第一行。(左图) 但是,我希望将标题呈现为第一列。(右图) 我不认为这是JTable中的一个简单标志 您能推荐一种方法或现有的小部件库吗 我假设我需要重写JTableHeader和JTable的paint()方法 谢谢 哎呀,不要介意你想要一个转置的表格模型,而不仅仅是行标题 请参见您可以使用TableModel来实现这一点,您应该在getColumnClass中返回一个特定的类,使用渲染器将其绘制为标题列。而且

我正在使用Java6.0+Swing+JTable

通常,JTable将标题呈现为第一行。(左图)

但是,我希望将标题呈现为第一列。(右图)

我不认为这是JTable中的一个简单标志

您能推荐一种方法或现有的小部件库吗

我假设我需要重写JTableHeader和JTable的paint()方法

谢谢


哎呀,不要介意你想要一个转置的表格模型,而不仅仅是行标题


请参见

您可以使用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