簡體   English   中英

如何使用標題作為第一列創建Java Swing JTable,而不是第一行?

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

我使用的是Java 6.0 + Swing + JTable。

通常,JTable將標頭呈現為第一行。 (左圖)

但是,我想將標題呈現為第一列。 (右圖)

我不認為這是JTable中的簡單標志。

你能推薦一種方法或現有的小部件庫嗎?

我假設我需要覆蓋JTableHeader和JTable的paint()方法。

謝謝

表頭與第一行的標題表頭標題為第一列

哎呀,沒關系,你想要一個轉置的TableModel,而不僅僅是行標題。

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

我有同樣的問題。 這是我的實施。 我有一個固定的標題數組,以及我的其余數據的二維數組,它通過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);
  }
}

這是輸出:

按列填充(動態)

您可以使用TableModel執行此操作,您應該在getColumnClass中返回一個特定的類,使用Renderer將其繪制為Header Column。 也許,你將使你的getValueAt垂直。

這不簡單,但可以。

當我發布它所發布的圖像不可見時,對於你的情況,你應該使用CellRenderer使它像一個標題,但它仍然在TableModel上。

怎么樣,你基本上覆蓋了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);
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM