iLEDについて

Javaサンプル

Netbeans

Libre Office Basicマクロ

その他


Author of This Site:
M. Kom. (kom9kmail@gmail.com)
Spam対策のため@マークは全角になっていますから、メール送信時には半角にしてください。

Java ソースコード JTableArray.java

JTableを使用した時の要素の並べ替え等のサンプル

このサンプルは、自動車名、車種、価格、燃費 をデータとして持ち、コンボボックスで 選択した車種をJTableに燃費順に一覧表示する。データの保持にArrayListを用いた場合の例。 ソートのためにComparatorインターフェイスをimplementしたクラスを作成して使用する。 GUI作成はNetBeansのデザイナを使用。NetBeansが自動生成した部分は省略し、手動入力した部分のみ を記載した。
import javax.swing.table.DefaultTableModel;
import java.util.*;

public class JTableArray extends javax.swing.JFrame {
  //JComboBoxのjComboBox1と、JTableのjTable1を使用。
  
  private String[] columnNames = {"車名", "車種", "価格", "燃費(km/l)"};

  //NetBeansデザイナ画面のjTable1のプロパティのmodelに、
  //ユーザコード→カスタムコードで、
  //tableModelを設定。(  jTable1.setModel(tableModel); )
  DefaultTableModel tableModel = new DefaultTableModel(columnNames, 0);
  //以下のtabledataに車のデータを記述。
  String[][] tableData = {
    {"カロラ", "小型車", "2109000", "16.5"},
    {"ミリラ", "軽自動車", "980000", "22.8"},
    {"Fitz", "小型車", "1900000", "23.3"},
    {"VVV", "小型車", "2580000", "23.0"},
    {"Big", "セダン", "3588000", "11.5"},
    {"SSS", "セダン", "3858000", "10.3"},
    {"ABC", "小型車", "1500000", "24.5"},
    {"Tanta", "軽自動車", "880000", "20"}
  };
  
  ArrayList aryList= new ArrayList();
  
  public JTableArray() {
    initComponents();
    
    //ArrayListに配列 tabledataのデータをコピー
    for(int i = 0 ; i < tableData.length ; i++){
      aryList.add(tableData[i]);//参照渡し.
    }
    
    //もし初期データに配列を用いず、直接ArrayListにデータを入れるなら
    //以下のように。
    //aryList.add(new String[]{"カローラ", "小型車", "1009000", "16.5"});
    //これは、データを後から追加するときにもつかう方法。
    
    //ArrayListにデータを入れる時に配列のコピーを渡す書き方.
    //元の配列データを変更しても影響なし。
    //aryList.add(tableData[i].clone());
    //参照渡しならば以下の書き方
    //aryl.add(strtest);
    
    ArrayComparator comparator = new ArrayComparator();
    comparator.setColumn( 3 );//並べ替えのキーは配列の4番目の項目
    Collections.sort(aryList, comparator );//aryListの並べ替え
    for(int i = 0 ; i < aryList.size() ; i++){
      tableModel.addRow(aryList.get(i));
    }
  }

  public class ArrayComparator implements Comparator {

    /** ソート対象のカラムの位置 */
    private int column = 0; //デフォルトでは1番目の要素をキーとする。

    /** ソートキーの入っているカラム番号 */
    public void setColumn( int col ) {
      this.column = col;
    }

    public int compare( Object a, Object b ) {
      //column番目の列に実数が文字列として入っているものとする。
      String[] strA = ( String[] ) a;
      String[] strB = ( String[] ) b;
      if(Double.valueOf(strA[column])-Double.valueOf(strB[column])>0.0){
        return(1);
      }else{
        return (-1);
      }
    }
  }
  
    private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    //jComboBox1のセレクトが変更されたとき、
    //まずデータを燃費順に並べ替えるためのArrayComparartorを用意。
    ArrayComparator comparator = new ArrayComparator();

    //tableModelをクリアすることで、Tableの表示データをいったん全て削除。
    tableModel.setRowCount(0);
    
    //次にセレクトされた車種に該当する車のみをtableModelに追加する。
    if(jComboBox1.getSelectedItem().equals("全車種")){
      for(int i = 0 ; i <  aryList.size() ; i++){
        tableModel.addRow(aryList.get(i));
      }
    }else {
      for(int i = 0 ; i < aryList.size() ; i++){
        if(aryList.get(i)[1].equals(jComboBox1.getSelectedItem())){
          tableModel.addRow(aryList.get(i));
        }
      }
    }

    }                                          
}

動作画面例

コンボボックスで表示対象とする車種を変更することができます。

fig

JTable and ArrayList Sample

Kom., 2013

fig

JTable and ArrayList Sample

Kom., 2013