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));
}
}
}
}
}
動作画面例
コンボボックスで表示対象とする車種を変更することができます。

JTable and ArrayList Sample
Kom., 2013

JTable and ArrayList Sample
Kom., 2013
