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