简体   繁体   English

如何使用标题作为第一列创建Java Swing JTable,而不是第一行?

[英]How do I create a Java Swing JTable with header as first column, not as first row?

I am using Java 6.0 + Swing + JTable. 我使用的是Java 6.0 + Swing + JTable。

Normally, JTable renders the header as the first row. 通常,JTable将标头呈现为第一行。 (Left image) (左图)

However, I would like to render the header as the first column. 但是,我想将标题呈现为第一列。 (Right image) (右图)

I don't think this is a simple flag in JTable. 我不认为这是JTable中的简单标志。

Can you please recommend an approach or existing widget library? 你能推荐一种方法或现有的小部件库吗?

I assume I need to override the paint() methods for JTableHeader and JTable. 我假设我需要覆盖JTableHeader和JTable的paint()方法。

Thanks 谢谢

表头与第一行的标题表头标题为第一列

Oops, never mind you want a transposed TableModel, not just row headers. 哎呀,没关系,你想要一个转置的TableModel,而不仅仅是行标题。

See http://tips4java.wordpress.com/2008/11/18/row-number-table/ http://tips4java.wordpress.com/2008/11/18/row-number-table/

I share the same issue. 我有同样的问题。 Here's my implementation. 这是我的实施。 I have an array for headers which is fixed, and a 2d array for the rest of my data, which is populated via json although not relevant nor shown here. 我有一个固定的标题数组,以及我的其余数据的二维数组,它通过json填充,虽然不相关,也没有在这里显示。 Do note this supports dynamic populating on a column level: 请注意,这支持在列级别上进行动态填充:

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);
  }
}

Here's the ouput: 这是输出:

按列填充(动态)

You can do that using an TableModel, you should return an specific Class in getColumnClass, use a Renderer to paint its like an Header Column. 您可以使用TableModel执行此操作,您应该在getColumnClass中返回一个特定的类,使用Renderer将其绘制为Header Column。 And probably, you will going to make your getValueAt in vertical. 也许,你将使你的getValueAt垂直。

This is not simple, but is possible. 这不简单,但可以。

When I posted it the images your posted was not visible, to your case, you should use a CellRenderer to make it like a Header, but its still on TableModel. 当我发布它所发布的图像不可见时,对于你的情况,你应该使用CellRenderer使它像一个标题,但它仍然在TableModel上。

How about this, you basically override getValueAt(int row, int column). 怎么样,你基本上覆盖了getValueAt(int row,int column)。 Here is a test class: 这是一个测试类:

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);
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 当用户单击标题时,如何防止对Java Swing JTable列进行排序? - How do I prevent a Java Swing JTable column from being sorted when the user click on the header? Java Swing-向JTable添加行号列(行标题) - Java Swing - Adding a row # column (row header) to a JTable 在Swing中的jTable的第一行转移焦点 - Transfer Focus at first Row of jTable in Swing Java Swing JTable列值和标头全角,怎么可能? - Java Swing JTable column value and header full width, how is it possible? "<i>Java Swing JTable;<\/i> Java Swing JTable;<\/b> <i>Right Click Menu (How do I get it to &quot;select&quot; aka highlight the row)<\/i>右键单击菜单(如何让它“选择”也就是突出显示该行)<\/b>" - Java Swing JTable; Right Click Menu (How do I get it to "select" aka highlight the row) 如何删除JTable中所选行(在第一列中有复选框)的文本? - How to strikethrough text of a selected row(having checkbox in first column) of JTable? 如何在Swing java中的JTable的一行中添加按钮 - How to add button in a row of JTable in Swing java 如何在 java swing 中向 jtable 添加行值? - how to add row values to jtable in java swing? 如何获取要在 JTable 中显示的图像 java swing - How do I get a an image to display in JTable in java swing 从JTable的第一列获取名称行 - Getting a row of names from the first column of JTable
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM