JTableにおいて、フォントサイズを全て12にしたいのですが、
どうしてもヘッダー列の文字が変更できません。
ヘッダー列以外は変更できたのですが・・・
お知恵を貸していただけると助かります。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

こんにちは



JTableHeader jh = jTable1.getTableHeader();
jh.setFont(new Font(jh.getFont().getFamily(),Font.PLAIN,12));
    • good
    • 3

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QJtableの特定のセルの背景色や文字色について

Jtable内部の特定のセルの背景色や文字色、フォントの変更に関して質問があります。25行30列のJtableの20行20列目のセルの背景色だけ赤色にしたい場合、具体的にどの様にプログラミングすれば良いでしょうか?
サンプルソースなどを教えてくださるとありがたいです!
javaに関して詳しい方、ぜひともお力を貸してください!

Aベストアンサー

prepareRenderer()をオーバーライドする例。

JTable table = new JTable(model) {
@Override
public Component prepareRenderer(TableCellRenderer tcr, int row, int column) {
Component c = super.prepareRenderer(tcr, row, column);
if (row == 20 && column == 20) {
c.setForeground(Color.BLUE);
c.setBackground(Color.RED);
} else {
c.setForeground(getForeground());
c.setBackground(getBackground());
}
return c;
}
};

QSwing 編集不可でも選択可能なJTableセルの設定方法

テーブルデータ編集不可でも行選択可能なJTableの設定方法をお教えいただきたいです。

私が試した方法では一つ問題点があり困っております。
その問題点とは、
セルをダブルクリックするとセルがへこみ、
そのまま別イベントでプログラム内部からテーブルへ書き込みをすると、
上記へこんだセルのみ変更が反映されないのです。

JTableを継承したJTableCustomクラスを作成し、
テーブルセル編集の不可設定を行うsetEditFalseメソッドを作成しました。
(補足:JTableのEnabledをfalseにすると行選択ができなくなってしまうので、
 CellEditerを使用しています)

public class JTableCustom extends JTable {

public JTableCustom() {
super();
this.setModel(new DefaultTableModel());
this.setSize(300,200);
}

/**
* テーブルセルの編集ができないように設定します。<br>
*/
public void setEditFalse(){
JTextField tf = new JTextField("");
tf.setEditable(false);
DefaultCellEditor dce = new DefaultCellEditor(tf);
TableColumnModel tcm = this.getColumnModel();
for (int i = 0; i < tcm.getColumnCount(); i++){
tcm.getColumn(i).setCellEditor(dce);
}
}
}

JTableCostomインスタンス作成後、上記メソッドを呼び設定を行います。

上記メソッドにセルがへこまないように設定する方法、
もしくは別の方法で上記機能を満たすものがあれば教えていただきたいです。
よろしくお願い致します。

テーブルデータ編集不可でも行選択可能なJTableの設定方法をお教えいただきたいです。

私が試した方法では一つ問題点があり困っております。
その問題点とは、
セルをダブルクリックするとセルがへこみ、
そのまま別イベントでプログラム内部からテーブルへ書き込みをすると、
上記へこんだセルのみ変更が反映されないのです。

JTableを継承したJTableCustomクラスを作成し、
テーブルセル編集の不可設定を行うsetEditFalseメソッドを作成しました。
(補足:JTableのEnabledをfalseにすると行選択が...続きを読む

Aベストアンサー

編集を不可にするのなら、TableModel#isCellEditable(int rowIndex, int columnIndex)
を調整してください。

全てのセルを編集不可にするなら、DefaultTableModelのisCellEditable(int rowIndex, int columnIndex)を常にfalseを返すようにオーバーライドすればいいでしょう。

QJTable の 列幅を個別に設定するには

JTable の 列幅を個別に設定するには、
どのようにしたらよいのでしょうか?
APIを参照しましたが、個別に列幅を
変えられるようなメソッドは見当たらなかったのですが…

Aベストアンサー

簡単なサンプルコードを示しました。
ご参考まで。


import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class TableSample {

public static void main(String[] args) {

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JTable table = new JTable();
table.setModel( new DefaultTableModel(100,30) );
table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
table.getColumnModel().getColumn(3).setPreferredWidth( 150 );
table.setRowHeight( 2, 60 );
table.setValueAt( "<html>ここの列幅を150<br>行高を60にしました", 2, 3 );

frame.add( new JScrollPane(table) );
frame.setSize( 800, 400 );
frame.setVisible( true );

}
}

簡単なサンプルコードを示しました。
ご参考まで。


import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class TableSample {

public static void main(String[] args) {

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JTable table = new JTable();
table.setModel( new DefaultTableModel(100,30) );
table.setAutoResizeMode( JTable.AUTO_RESIZE_OF...続きを読む

QJTableの列の幅設定

JTableの列の幅設定をしたいのですが、
わかりません。教えて下さい。

setRowHeightのように、setColumnHeightみたいなのって、
ないのでしょうか?

Aベストアンサー

今、テーブルの列が2列で、JTable table;だったとします。


DefaultTableColumnModel cmodel=(DefaultTableColumnModel)table.getColumnModel();
TableColumn column0 = cmodel.getColumn(0);
TableColumn column1 = cmodel.getColumn(1);
column0.setPreferredWidth(40);
column1.setPreferredWidth(250);

という感じで設定できたかと思います。

QJTableの特定セルの背景色を変更

現在swingを勉強中です。
よろしくお願いします。

JTableで例えば、ある列の値が
1行目:10~100
2行目:20~40
3行目:80~120
4行目:150~200
のような範囲を持った値のとき、
範囲が重なっている1行目から3行目のセルの背景色を変更したいのですが、可能でしょうか。
おそらくTableCellRender等を使用するのかとは思うのですが…

Aベストアンサー

 こんにちは。

>範囲が重なっている1行目から3行目のセルの背景色を
>変更したいのですが、可能でしょうか。

 可能です。

 ただし、JTableの内部構造をある程度知っておく必要があります。

 JTableやJListは、描画方法がやや変わっています。
 たとえば、JTabelのディフォルトのTableCellRendererは、DefaultTableCellRendererですが、これは、JLabelを継承して作られているので、実質はJLabelです。
 しかし、10×10の表があった場合、100個のJLabelのインスタンスがあるわけではありません。
 DefaultTableCellRendererのインスタンスは一つで、それを描画時にポンポンとハンコのように押していくことで、描画していきます。

 それを実現しているのが、getTableCellRendererComponentメソッドです。

 ぜひ、DefaultTableCellRendererのソースコードを読んでみてください。

 ここを理解できれば、あとは、DefaultTableCellRendererを継承し、getTableCellRendererComponentメソッドをオーバーライドして、自分の意に沿うRendererを実装することはたやすいと思います。

 こんにちは。

>範囲が重なっている1行目から3行目のセルの背景色を
>変更したいのですが、可能でしょうか。

 可能です。

 ただし、JTableの内部構造をある程度知っておく必要があります。

 JTableやJListは、描画方法がやや変わっています。
 たとえば、JTabelのディフォルトのTableCellRendererは、DefaultTableCellRendererですが、これは、JLabelを継承して作られているので、実質はJLabelです。
 しかし、10×10の表があった場合、100個のJLabelのインスタンスがあるわけではあり...続きを読む

Q2列目を右寄せにしたい

今JAVAを勉強しているのですが、
下記のソース上でどうしても
列の右寄せができません。
リファレンスの調べ方が下手なのかもしれませんが
わかる方宜しくお願いします。

----------------------------------------------
import java.awt.*;
import javax.swing.*;

public class Sample3 extends JApplet
{
private JLabel lb;
private JTable tb;
private JScrollPane sp;

public void init()
{
//コンテンツペインの取得
Container cnt = getContentPane();

String colname[] = {"車名","価格","月日"};
String data[][] = {
{"乗用車","1200円","10-01"},
{"トラック","2400円","10-05"},
};

//コンポーネントの作成
lb = new JLabel("いらっしゃいませ");
tb = new JTable(data,colname);
sp = new JScrollPane(tb);

//コンテナへ追加
cnt.add(lb,BorderLayout.NORTH);
cnt.add(sp,BorderLayout.CENTER);
}
}
-------------------------------------------------

今JAVAを勉強しているのですが、
下記のソース上でどうしても
列の右寄せができません。
リファレンスの調べ方が下手なのかもしれませんが
わかる方宜しくお願いします。

----------------------------------------------
import java.awt.*;
import javax.swing.*;

public class Sample3 extends JApplet
{
private JLabel lb;
private JTable tb;
private JScrollPane sp;

public void init()
{
//コンテンツペインの取得
Container cnt = getContentPane();

String c...続きを読む

Aベストアンサー

 こんばんは。

 2列目のコラムに右寄せ用のDefaultCellRendererを設定してやればいいと思います。

 ↓こんな感じでしょうか。

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class Sample3 extends JApplet
{
  private JLabel lb;
  private JTable tb;
  private JScrollPane sp;
  
  public void init()
  {
    //コンテンツペインの取得
    Container cnt = getContentPane();
    
    String colname[] = {"車名","価格","月日"};
    String data[][] = {
    {"乗用車","1200円","10-01"},
    {"トラック","2400円","10-05"},
    };
    
    //コンポーネントの作成
    lb = new JLabel("いらっしゃいませ");
    tb = new JTable(data,colname);
    sp = new JScrollPane(tb);
    
    TableColumnModel cm = tb.getColumnModel();
    TableColumn column = cm.getColumn(1);
    DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
    renderer.setHorizontalAlignment(SwingConstants.RIGHT);
    column.setCellRenderer(renderer);
    
    //コンテナへ追加
    cnt.add(lb,BorderLayout.NORTH);
    cnt.add(sp,BorderLayout.CENTER);
  }
}

 こんばんは。

 2列目のコラムに右寄せ用のDefaultCellRendererを設定してやればいいと思います。

 ↓こんな感じでしょうか。

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;

public class Sample3 extends JApplet
{
  private JLabel lb;
  private JTable tb;
  private JScrollPane sp;
  
  public void init()
  {
    //コンテンツペインの取得
    Container cnt = getContentPane();
    
    String colname[] = {"車...続きを読む

QJScrollPane上のJTableの再描画

JPanel上で,以下の初期化関数を作って,データが更新されたときに,この初期化関数を再度呼び出して,テーブルを作り直しています.

描画直後は,正しく表示されるのですが,
スクロールバーに触ったり,セルをクリックしたりすると,
初めに作成したテーブルの表示に戻ってしまいます.

何が原因で,どのように対処すれば良いのでしょうか?
ご回答いただけますよう,よろしくお願いいたします.

public void init_table()
{
tablemodel1 = new DefaultTableModel(column_names1, text.keyword_num);
table1 = new JTable(tablemodel1);
scrollt1 = new JScrollPane(table1);
add(scrollt1);

    以下略
}

Aベストアンサー

何にadd()しとんのや?
レイアウトマネージャはちゃんとしとんのか?

ふつうSwingのコンテナなら、
古いコンポーネントを
remove()して
repaint()して
新しいコンポーネントを
add()して
revalidate()するのが基本的な手続きどすえ。

QSwingでJtableのヘッダ行が表示されません

SwingでJtableのヘッダ行が表示されません

解決方法とどうして表示されなかったのか理由もできればお願いします。
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

public class Table_Calendar extends JFrame{
Vector<String>[] data = new Vector[3];
public static void main(String args[]){
new Table_Calendar();
}
public Table_Calendar(){
super();
// ウィンドウサイズ
this.setSize(800, 600);
// レイアウト
this.setLayout(null);
// ウィンドウクローズ時の処理
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// セルのデータ作成
for (int i = 0; i < 3; i++) {
data[i] = new Vector<String>();
}
// data[0]に名前、data[1]に住所、data[2]に電話番号
data[0].addElement("鈴木一郎");
data[1].addElement("東京都");
data[2].addElement("xxxxxxxxxx");
// テーブル作成
TableModel tableModel = new AbstractTableModel() {
// 行数
public int getRowCount() {
return 1;
}

// 列数
public int getColumnCount() {
return 3;
}

// row行column列の値をセット
public Object getValueAt(int row, int column) {
return data[column].elementAt(row);
}

// タイトル部の値をセット
public String getColumnName(int column) {
switch (column) {
case 0:
return "名前";
case 1:
return "住所";
case 2:
return "電話番号";
}
return "";
}
};
JTable table = new JTable(tableModel);
table.setLocation(10, 20);
table.setSize(600,500);
JPanel panel2 = new JPanel();
panel2.setLayout(null);
panel2.add(table);
/*setBounds(int x,int y,int width,int height)*/
panel2.setBounds(10, 10, 700,700);
this.add(panel2);
this.setVisible(true);
}

}

SwingでJtableのヘッダ行が表示されません

解決方法とどうして表示されなかったのか理由もできればお願いします。
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;

public class Table_Calendar extends JFrame{
Vector<String>[] data = new Vector[3];
public static void main(String args[]){
new Table_Calendar();
}
public Table_Calendar(){
super()...続きを読む

Aベストアンサー

No.1様の回答のとおり、JScrollPaneに入れると自動で表示されるようです。

GUI系は正直全然知らないのですが、APIには
>スタンドアロンのビュー (JScrollPane の外側) 内で JTable を使用し、ヘッダーを表示する場合は、getTableHeader() を使用してヘッダーを取得し、個別に表示できます。
とあります。
JscrollPaneの外側でヘッダーを表示するサンプルが、チュートリアルにありました。
http://download.oracle.com/javase/tutorial/uiswing/components/table.html#show
>container.setLayout(new BorderLayout());
>container.add(table.getTableHeader(), BorderLayout.PAGE_START);
>container.add(table, BorderLayout.CENTER);
とすると表示できるようです。

まずはAPIなどを見てみるようにしてみてはいかがでしょうか。

No.1様の回答のとおり、JScrollPaneに入れると自動で表示されるようです。

GUI系は正直全然知らないのですが、APIには
>スタンドアロンのビュー (JScrollPane の外側) 内で JTable を使用し、ヘッダーを表示する場合は、getTableHeader() を使用してヘッダーを取得し、個別に表示できます。
とあります。
JscrollPaneの外側でヘッダーを表示するサンプルが、チュートリアルにありました。
http://download.oracle.com/javase/tutorial/uiswing/components/table.html#show
>container.setLayout(new BorderLayout...続きを読む

QjTableのセルを入力禁止にしたい。

jTable上でマウスをダブルクリックしたときにセルが入力可能状態になることを
禁止したいのですがどのようにすれば良いですか?
環境はNetBeansを使用しています。

Aベストアンサー

http://terai.xrea.jp/Swing/CellEditor.html

これの事???

QJTableクリック時の処理

bomberhead@Java初心者です。
WindowsNTでBorland社のJBuilder4を使用して
アプリケーションの開発をしています。

質問ですが、JTableクリック時の処理はどうすれば良いでしょうか?

手元の参考文献では別途ボタンを設けて、ボタンクリック時に
JTableの内容を取得する方法が載っているのですが
JTableクリック時にJTableの内容を取得したいと思っております。

何卒よろしくお願いします。

Aベストアンサー

はずした回答だったらすみません。<(_ _)>
また「JTableの内容を取得する」という意味も取り違えていたらすみません。

とりあえずJTableはaddMouseListenerというメソッドが使えますからそれで
マウスでのイベントを定義できるはずですし、JBuilder4を使用しているなら
設計画面のインスペクタにイベントというタブがありますからそこからmouseClicked
のイベントを自動的にJBuilder4が書いてくれるはずです。
実際書くならこんな感じでしょうか?ちなみに全然試していないので自信は
ありません。(^^ゞ
    jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mouseClicked(MouseEvent e) {
        //選択行の行番号を取得します
        int ii = jTable1.getSelectedRow();
        //選択行の1番目のカラムの内容を取得します。
        String s1 = (String)jTable1.getValueAt( ii, 1 );
      }
    });

はずした回答だったらすみません。<(_ _)>
また「JTableの内容を取得する」という意味も取り違えていたらすみません。

とりあえずJTableはaddMouseListenerというメソッドが使えますからそれで
マウスでのイベントを定義できるはずですし、JBuilder4を使用しているなら
設計画面のインスペクタにイベントというタブがありますからそこからmouseClicked
のイベントを自動的にJBuilder4が書いてくれるはずです。
実際書くならこんな感じでしょうか?ちなみに全然試していないので自信は
ありません。(^...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報