Tides_of_War

盤根錯節

JTable セル編集中のフォントを変更する

JTableにてテーブルのフォントを変更するにはtable.setFont(font)のように指定します。
ヘッダーのフォントを変更するには、table.getTableHeader().setFont(font)のように指定します。

参考元
ateraimemo.com

しかし上記指定を行っても、セルを編集している際のフォントは変更できません。
以下の画像はテーブル・ヘッダーのフォントを、メイリオ・プレーン・サイズ23に指定したものです。
3行3列目に「i」を入力している場面ですが、明らかにフォントが異なる(デフォルトになっている)ことが分かります。

これでも支障はありませんが、若干見栄えが悪いと感じる人もいるのではないでしょうか?
その場合は以下の3行を追加することで、セル編集時のフォントも変更することが可能です。

// セル編集時のフォントを指定
DefaultCellEditor editor = 
      (DefaultCellEditor)table.getDefaultEditor(Object.class);
Component component = editor.getComponent();
component.setFont(font);

以下、ソースコード全文。

package table;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Font;

import javax.swing.DefaultCellEditor;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;

public class ChangeFontTable extends JFrame {

    private JPanel contentPane;
    private JTable table;

    public ChangeFontTable() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 400, 250);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JScrollPane scrollPane = new JScrollPane();
        contentPane.add(scrollPane, BorderLayout.CENTER);

        table = new JTable();
        table.setModel(new DefaultTableModel(
            new Object[][] {
                {null, null, null},
                {null, null, null},
                {null, null, null}
            },
            new String[] {
                "1", "2", "3"
            }
        ));
        table.setRowHeight(28);
        Font font = new Font("メイリオ", Font.PLAIN, 23);
        // テーブルのフォントを指定
        table.setFont(font);
        // ヘッダーのフォントを指定
        table.getTableHeader().setFont(font);
        // セル編集時のフォントを指定
        DefaultCellEditor editor =
           (DefaultCellEditor)table.getDefaultEditor(Object.class);
        Component component = editor.getComponent();
        component.setFont(font);

        scrollPane.setViewportView(table);
    }

    public static void main(String[] args) {
        ChangeFontTable frame = new ChangeFontTable();
        frame.setVisible(true);
    }
}

以下実行結果です。編集中のフォントも変更されています。


これにてJTable絡みの投稿は一旦終了します。また何か気になることがあれば投稿します。


以下雑感
SwingやJTable関係で気になることがあっても、日本語では全くヒットしなくて悩む時間が長くなってしまった。
「JTable ○○」で検索しても、1ページ目の時点でJavaではなく、HTMLやJavaScriptの記事がヒットしてしまうので全く参考にならない。
JavaGUIアプリを作る機会なんて、多くの人には無いだろうから情報が少ないのはしょうがない。
ただGoogleに勘弁してほしいのは、「JTable」で検索してるのに「Table」と広義に解釈するのはやめてほしい。
だから情報がほしいときは英語キーワードで検索するだけでは不十分で、わざわざ英語版のGoogleから検索しないと、欲しい情報は一生手に入らない。

www.google.com


後、はてなブログソースコード書くのは難しい。はてな記法ソースコードを貼り付けているのだが、謎の改行が加えられてしまうことがある。
そもそもはてなブログのデザインの大半が横幅が狭く、50行ぐらいで改行されてしまいレイアウトがメチャクチャになってしまう。
改造すればいい感じになるのだろうか?とはいえこのブログはテック特化ではないので、本気で改造するつもりもないのだけれど。