2011年9月8日木曜日

JTableでの数値のソート

import java.awt.BorderLayout;
import java.awt.Container;
import java.util.Comparator;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

public class swingTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO 自動生成されたメソッド・スタブ
  JFrame frame = new JFrame("サンプル");

  // Xボタンが押された時の挙動
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  // ウインドウサイズ
  frame.setSize(320, 160);
  // ウインドウの表示場所とサイズ指定
  frame.setLocationRelativeTo(null);
  //frame.setBounds(2500, 200, 300, 150);

  // JFrameよりContentPaneを取得
  Container contentPane = frame.getContentPane();
  // ボタンのインスタンスを生成
  JButton button = new JButton("button");
  contentPane.add(button, BorderLayout.SOUTH);
  
  String[][] tabledata = {
       {"10", "1" , "cfd"},
       {"1", "111" , "ade"},
       {"9", "45" , "ree"},
       {"3", "33" , "brt"}};

  String[] columnNames = { "データ1", "データ2" ,"データ3"};
  
  DefaultTableModel tableModel = new DefaultTableModel(columnNames,0);
  TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>(tableModel);
  JTable table = new JTable(tableModel);

  sorter.setComparator(0, new Comparator<String>() {
   public int compare(String a, String b) {
    return Integer.parseInt(a) - Integer.parseInt(b);
   }
  });

  table.setRowSorter(sorter);

  for (int i = 0; i < tabledata.length; i++) {
   tableModel.addRow(tabledata[i]);
  }

  JScrollPane scroll = new JScrollPane(table);
  
  contentPane.add(scroll, BorderLayout.CENTER);

  // ウィンドウを表示
  frame.setVisible(true);
  
 }
 
}
一番左の行で数値のソートが可能です。
sorter.setComparator(0new Comparator<String>() の行で0を1にすれば、
データ2で数値のソートができる。
 

0 件のコメント:

コメントを投稿