タブを無効にした時の画像を指定する

広告

タブが無効になった時にデフォルトでは元の画像をグレースケールにしたような画像が表示されますが、無効になった時に別の画像を表示する方法を確認します。JTabbedPaneクラスで用意されている「setDisabledIconAt」メソッドを使います。

index の無効なアイコンを icon に設定します。 null にすることもできます。
そのインデックスにタブがない場合は内部例外がスローされます。

パラメータ:
  index - 使用不可のアイコンを設定するタブのインデックス
  disabledIcon - 使用不可の場合にタブに表示されるアイコン 
例外: 
  IndexOutOfBoundsException - インデックスが範囲外の場合
    (index < 0 || index >= タブの総数)

1番目の引数に無効の時の画像を設定したいタブのインデックスを指定します。インデックスはタブが追加された順に割り振られた番号で最初のタブのインデックスは「0」となります。存在しないインデックスを指定すると例外が発生します。

2番目の引数にタブが無効の時に表示したい画像を表すIconインターフェースを実装したクラスのオブジェクトを指定します。JavaではIconインターフェースを実装したクラスとしてImageIconクラスが用意されていますので通常はImageIconクラスのオブジェクトを指定して下さい。(ImageIconクラスについては『ImageIconクラス』を参照して下さい)。

実際の使い方は次のようになります。

ImageIcon icon = new ImageIcon("./img/sample.png");
ImageIcon disabledicon = new ImageIcon("./img/sample2.png");

JTabbedPane tabbedpane = new JTabbedPane();
tabbedpane.addTab("title1", icon, new JButton("button1"));

tabbedpane.setDisabledIconAt(0, disabledicon);

サンプルプログラム

では簡単なサンプルを作成して試してみます。

JTabbedPaneTest11.java

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

public class JTabbedPaneTest11 extends JFrame{

  public static void main(String[] args){
    JTabbedPaneTest11 frame = new JTabbedPaneTest11();

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
  }

  JTabbedPaneTest11(){
    JTabbedPane tabbedpane = new JTabbedPane();

    JPanel tabPanel1 = new JPanel();
    tabPanel1.add(new JButton("button1"));

    JPanel tabPanel2 = new JPanel();
    tabPanel2.add(new JLabel("Name:"));
    tabPanel2.add(new JTextField("", 10));

    JPanel tabPanel3 = new JPanel();
    tabPanel3.add(new JButton("button2"));

    ImageIcon icon = new ImageIcon("./img/mem10.gif");
    ImageIcon disabledicon = new ImageIcon("./img/mem10s.gif");

    tabbedpane.addTab("tab1", icon, tabPanel1);
    tabbedpane.addTab("tab2", icon, tabPanel2);
    tabbedpane.addTab("tab3", icon, tabPanel3);

    tabbedpane.setEnabledAt(1, false);
    tabbedpane.setEnabledAt(2, false);
    tabbedpane.setDisabledIconAt(2, disabledicon);

    getContentPane().add(tabbedpane, BorderLayout.CENTER);
  }
}

上記をコンパイルした後で実行すると次のように表示されます。

JTabbedPaneでタブが無効の時の画像を設定する

左から2番目と3番目のタブを無効にしました。2番目のタブはデフォルトの状態ですが3番目のタブには無効になった時の画像を設定してあります。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)