3

Java 6.0 + Swing + JTable を使用しています。

通常、JTable はヘッダーを最初の行としてレンダリングします。(左画像)

ただし、ヘッダーを最初の列としてレンダリングしたいと思います。(右画像)

これは JTable の単純なフラグではないと思います。

アプローチまたは既存のウィジェット ライブラリを推奨できますか?

JTableHeader と JTable の paint() メソッドをオーバーライドする必要があると思います。

ありがとう

最初の行にヘッダーがあるテーブル 最初の列としてヘッダーを持つテーブル

4

4 に答える 4

1

行ヘッダーだけでなく、転置されたTableModelが必要であることを気にしないでください。

http://tips4java.wordpress.com/2008/11/18/row-number-table/を参照してください

于 2011-03-18T14:12:48.327 に答える
0

TableModelを使用してこれを行うことができます。getColumnClassで特定のクラスを返し、レンダラーを使用してヘッダー列のようにペイントする必要があります。そしておそらく、getValueAtを垂直にするでしょう。

これは単純ではありませんが、可能です。

私が投稿したとき、投稿した画像は表示されませんでした。あなたの場合、CellRendererを使用してヘッダーのようにする必要がありますが、それでもTableModelにあります。

于 2011-03-18T14:13:11.610 に答える
0

私は同じ問題を共有しています。これが私の実装です。固定されたヘッダー用の配列と、残りのデータ用の 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);
  }
}

出力は次のとおりです。

列ごとの入力 (動的)

于 2015-03-17T03:11:06.127 に答える
0

これはどうですか、基本的に 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);
    }

}
于 2011-03-18T14:27:57.983 に答える