- ベストアンサー
JTableの列ヘッダ
JTableの列ヘッダ(列見出し)を表示する方法で、 JScrollPaneを利用せずに表示する方法はありますでしょうか? テーブルに見出しをつけたいのですが、スクロールバーをつけたくないのです。 お手数ですがご教授お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> テーブルをスクロールパネル⇒パネル⇒フレームと乗せると表示さ > れるのですが、テーブル⇒パネル⇒フレームとすると表示されない > ようなのです。 あぁ!。そのことなら、JTableのドキュメンテーションの最初のほうに、相当昔から書いてありますよ。設計者は、テーブル本体を切り離せたほうが便利、と考えたのでしょう。以下はドキュメンテーションからの引用です(日本語のは例によって文章がヘンなので、英語を引用します): <quote> Note that if you wish to use a JTable in a standalone view (outside of a JScrollPane) and want the header displayed, you can get it using getTableHeader() and display it separately. </quote> 以下のプログラムをコンパイルして動かしてみてください: (全角スペース->半角スペースに) ---------------------------------------------- import javax.swing.*; import javax.swing.table.*; import java.awt.*; import static java.awt.FlowLayout.*; public class TableRheaders{ public static void main(String[] args){ String[][] rowData = { {"1-1", "1-2"}, {"2-1", "2-2"} }; String[] header = {"1列目", "2列目"}; JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel pane = new JPanel(); pane.setLayout(new FlowLayout(CENTER, 0, 0)); JTable tbl = new JTable(rowData, header); JTableHeader jth = tbl.getTableHeader(); pane.setPreferredSize(new Dimension(150, 100)); pane.add(jth); pane.add(tbl); frame.setSize(200, 150); frame.getContentPane().add(pane); frame.setVisible(true); } } -----------------------------------
その他の回答 (2)
- bgbg
- ベストアンサー率53% (94/175)
列ヘッダ、行ヘッダはJTableの内容物ではなく、JScrollPaneの内容物です。 従って、JScrollPane使わずして行ヘッダ、列ヘッダを表示させることはできません。 スクロールバーを表示させたくないだけなら、JScrollPaneを生成する際にコンストラクタで表示/非表示を指定できます。 JScrollPane scrollPane = new JScrollPane(aJTable, JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ) 詳しくはJavaDoc参照。 http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/javax/swing/JScrollPane.html
お礼
ご回答ありがとうございます。 >列ヘッダ、行ヘッダはJTableの内容物ではなく、JScrollPaneの内容物です。 >従って、JScrollPane使わずして行ヘッダ、列ヘッダを表示させることはできません。 別物として扱えるものだと思っていました。 とりあえずスクロールバーを消す方向でやってみたいと思います。 ありがとうございました。
- _ranco_
- ベストアンサー率58% (126/214)
行ヘッダ(row header)ですね? 別のテーブル(ワンカラムだけのテーブル)を使う方法がありますよ。 もっと簡単なやり方として、カラムゼロだけ特別なレンダラで色違いにするやり方もあります。
お礼
ご回答ありがとうございます。 >行ヘッダ(row header)ですね? いえ、行ヘッダ(一番左の列に見出しを表示)ではなく、 1行目を見出しとするようなイメージでです。 テーブルをスクロールパネル⇒パネル⇒フレームと乗せると表示されるのですが、 テーブル⇒パネル⇒フレームとすると表示されないようなのです。 わかりにくいかもしれないので試してみたソースを一部載せますね。 ------------------------ ○列ヘッダが表示される (String headerが表示される) String rowData = { {"1-1", "1-2"}, {"2-1", "2-2"} }; String header = {"1列目", "2列目"}; JFrame frame = new JFrame(); JPanel pane = new JPanel(); JTable tbl = new JTable(rowData, header); JScrollPane scrlPane = new ScrollPane(tbl); scrlPane.setPreferredSize(new Dimension(150, 100)); pane.setPreferredSize(new Dimension(150, 100)); pane.add(scrlPane); frame.size(200, 150); frame.getContentPane().add(pane); frame.setVisible(true); ------------------------ ○表示されない (String headerが表示されない) String rowData = { {"1-1", "1-2"}, {"2-1", "2-2"} }; String header = {"1列目", "2列目"}; JFrame frame = new JFrame(); JPanel pane = new JPanel(); JTable tbl = new JTable(rowData, header); pane.setPreferredSize(new Dimension(150, 100)); pane.add(tbl); frame.size(200, 150); frame.getContentPane().add(pane); frame.setVisible(true); -------------------------------------
お礼
ご回答ありがとうございます。 ヘッダをテーブルから取り出し、パネルに追加することで表示を行えるようになるのですね。 理解できました。ありがとうございました。