表示方法の変更(項目の幅と高さ)

広告

今までは各項目毎の幅と高さは自動的に決められていましたが、指定することも可能です(自動の場合は一番大きい項目の幅に合わせられていると思います)。

幅に関しては"setFixedCellWidth"メソッドを、高さに関してはと"setFixedCellHeight"メソッドを使います。

setFixedCellWidthメソッド

リストにあるすべてのセルの幅を設定します。width が -1 の場合、各リスト
要素の cellRenderer コンポーネントに getPreferredSize を適用することに
より、セル幅が計算されます。 

このプロパティのデフォルト値は -1 です。

パラメータ:
  width - ピクセル単位の、リスト内のすべてのセルの幅

setFixedCellHeightメソッド

リストにあるすべてのセルの高さを設定します。height が -1 の場合、各リ
スト要素の cellRenderer コンポーネントに getPreferredSize を適用するこ
とにより、セルの高さが計算されます。 

このプロパティのデフォルト値は -1 です。

パラメータ:
  height - リスト内のすべてのセルの高さをピクセル数で指定する整数

幅や高さを指定せずに自動で決める場合には「-1」を指定します。

実際にサンプルで試してみます。

import javax.swing.*;
import java.awt.*;
import java.util.Vector;

public class JListSample extends JFrame{

  protected JList list;

  public static void main(String[] args){
    JListSample test = new JListSample("JListSample");

    /* 終了処理を変更 */
    test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    test.setBounds( 10, 10, 250, 160);
    test.setVisible(true);
  }

  JListSample(String title){
    setTitle(title);

    /* JListの初期データ */
    Vector<String> initData = new Vector<String>();
    StringBuffer sb;
    for (int i = 0 ; i < 30 ; i++){
      sb = new StringBuffer();
      sb.append("項目");
      sb.append(i);
      initData.add(new String(sb));
    }
    list = new JList(initData);

    list.setVisibleRowCount(0);
    list.setLayoutOrientation(JList.HORIZONTAL_WRAP);
    list.setFixedCellWidth(60);
    list.setFixedCellHeight(40);

    JScrollPane sp = new JScrollPane();
    sp.getViewport().setView(list);
    sp.setPreferredSize(new Dimension(200, 80));

    JPanel p = new JPanel();
    p.add(sp);

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

実行結果は下記のようになります。

表示方法の変更(項目の幅と高さ)

( Written by Tatsuo Ikura )

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