アプリ版:「スタンプのみでお礼する」機能のリリースについて

JTableの列ヘッダ(列見出し)を表示する方法で、
JScrollPaneを利用せずに表示する方法はありますでしょうか?
テーブルに見出しをつけたいのですが、スクロールバーをつけたくないのです。

お手数ですがご教授お願いします。

A 回答 (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);
 }
}
-----------------------------------
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ヘッダをテーブルから取り出し、パネルに追加することで表示を行えるようになるのですね。

理解できました。ありがとうございました。

お礼日時:2008/04/10 15:20

列ヘッダ、行ヘッダは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/ …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>列ヘッダ、行ヘッダはJTableの内容物ではなく、JScrollPaneの内容物です。
>従って、JScrollPane使わずして行ヘッダ、列ヘッダを表示させることはできません。
別物として扱えるものだと思っていました。
とりあえずスクロールバーを消す方向でやってみたいと思います。

ありがとうございました。

お礼日時:2008/04/10 14:22

行ヘッダ(row header)ですね?


別のテーブル(ワンカラムだけのテーブル)を使う方法がありますよ。
もっと簡単なやり方として、カラムゼロだけ特別なレンダラで色違いにするやり方もあります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>行ヘッダ(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);

-------------------------------------

お礼日時:2008/04/10 10:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!