JTable内の特定の行を選択する

戻る



::::::::::::::
QueryResultRetriever.java
::::::::::::::
import javax.swing.*;
import javax.swing.table.*;

import java.util.*;

import java.awt.*;
import java.awt.event.*;

/**
* $Id: RowSelection.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
* @author KISHI Yasuhiro
*/

public class QueryResultRetriever {

    /**
    * @param selectedStatus 選択されたステータス 
    * @return テーブルのモデル
    */
    public static DefaultTableModel retrieve( String selectedStatus ) {

        DefaultTableModel model = new DefaultTableModel();

        java.util.List columnNameList = new LinkedList();
        columnNameList.add( "個体識別番号" );
        columnNameList.add( "アイテム種別" );
        columnNameList.add( "ステータス" );
        columnNameList.add( "登録日時" );
        columnNameList.add( "更新日時" );
        columnNameList.add( "オペレータ" );

        //-------------------------------------------------------------
        // 選択されたステータスに応じて表示する属性を変える
        //-------------------------------------------------------------
        Map additionalColumnMap = getAdditionalColumns( selectedStatus );
        Iterator itrt = additionalColumnMap.keySet().iterator();
        while ( itrt.hasNext() ) {
            String attr = ( String ) itrt.next();
            columnNameList.add( additionalColumnMap.get( attr ) );
        }

        // テーブルのヘッダを決める
        Object[] columnNames = new Object[ columnNameList.size() ];
        for ( int i = 0;i < columnNames.length;i++ ) {
            columnNames[ i ] = columnNameList.get( i );
        }
        model.setColumnIdentifiers( columnNames );

        ItemManager manager = ItemManager.getInstance();
        Map map = manager.getGUIDIndex();
        Iterator iterator = map.keySet().iterator();

        while ( iterator.hasNext() ) {
            Integer guid = ( Integer ) iterator.next();
            Item item = ( Item ) map.get( guid );
            String status = ( String ) item.getAttributeValue( "STATUS" );
            Object createdDate = item.getAttributeValue( "CREATED_DATE" );
            Object lastUpdatedDate = item.getAttributeValue( "LAST_UPDATED_DATE" );
            Object operator = item.getAttributeValue( "OPERATOR" );
            ItemType itemType = item.getItemType();
            String itemTypeName = itemType.getName();

            Object[] rec = new Object[ columnNames.length ];
            rec[ 0 ] = guid;
            rec[ 1 ] = itemTypeName;
            rec[ 2 ] = status;
            rec[ 3 ] = createdDate;
            rec[ 4 ] = lastUpdatedDate;
            rec[ 5 ] = operator;

            //-------------------------------------------------------------
            // 選択されたステータスに応じて取得する属性名・値を変える
            //-------------------------------------------------------------
            Map acMap = getAdditionalColumns( selectedStatus );
            Iterator itrt2 = additionalColumnMap.keySet().iterator();
            int i = 1;
            while ( itrt2.hasNext() ) {
                String attr = ( String ) itrt2.next();
                rec[ 5 + i ] = item.getAttributeValue( attr );
                i++;
            }

            // 対象ステータスのレコードのみモデルに追加する
            if ( !status.equals( selectedStatus ) ) {
                continue;
            }

            model.addRow( rec );
        }

        return model;

    }

    static Map getAdditionalColumns( String selectedStatus ) {
        Map map = new LinkedHashMap();

        if ( "AVAILABLE".equals( selectedStatus ) ) {
            map.put( "VENDOR", "仕入先" );
            map.put( "ASSEMBLY_LINE", "製造ライン" );
            map.put( "REPAIRER", "修理業者" );
        }
        if ( "AVAILABLE_BEFORE_CHECK_OUT".equals( selectedStatus ) ) {
            map.put( "VENDOR", "仕入先" );
            map.put( "WAREHOUSE", "倉庫" );
        }
        if ( "UNAVAILABLE".equals( selectedStatus ) ) {
            map.put( "VENDOR", "仕入先" );
        }
        if ( "CREATED".equals( selectedStatus ) ) {
            map.put( "VENDOR", "仕入先" );
        }
        if ( "CHECK_IN".equals( selectedStatus ) ) {
            map.put( "WAREHOUSE", "倉庫" );
        }
        if ( "CHECK_OUT".equals( selectedStatus ) ) {
            map.put( "ASSEMBLY_LINE", "製造ライン" );
        }
        if ( "NEEDS_REPAIRMENT".equals( selectedStatus ) ) {
            map.put( "VENDOR", "仕入先" );
        }
        if ( "REPAIRED".equals( selectedStatus ) ) {
            map.put( "REPAIRER", "修理業者" );
        }
        if ( "DISPOSED".equals( selectedStatus ) ) {
            map.put( "REASON_FOR_DISPOSAL", "廃棄理由" );
        }

        return map;
    }

}
::::::::::::::
QueryResultRowChooser.java
::::::::::::::
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;

import java.util.*;

/**
* $Id: RowSelection.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
* <pre>
* テーブル内の特定の行を選択する
* </pre>
*/

public class QueryResultRowChooser extends MouseAdapter {
    public QueryResultRowChooser( ) {}
    public void mousePressed( MouseEvent e ) {
        JTable table = ( JTable ) e.getSource();
        int rowNum = table.getSelectedRow();

        //----------------------------------------------------------------------------------------------------------
        // TableSorterをモデルとしてセットしているので、スーパークラスのAbstractTableModelにキャストする必要がある
        //----------------------------------------------------------------------------------------------------------
        AbstractTableModel model = ( AbstractTableModel ) table.getModel();

        Object valueOfGuid = model.getValueAt( rowNum, 0 );

        System.out.println( "/*** in " + this.getClass().getName() + " GUID=" + valueOfGuid );
    }
}

::::::::::::::
QueryResultViewerByStatus.java
::::::::::::::
import javax.swing.*;
import javax.swing.table.*;

import java.util.*;

import java.awt.*;
import java.awt.event.*;

/**
* $Id: RowSelection.html,v 1.1 2009/06/22 16:11:55 kishi Exp kishi $
* @author KISHI Yasuhiro
*/

public class QueryResultViewerByStatus {

    private JPanel panel;

    public QueryResultViewerByStatus( JPanel panel ) {

        this.panel = panel;

        panel.setLayout( new BorderLayout() );
        panel.add( new JLabel( "ステータス別アイテムリスト", JLabel.CENTER ), BorderLayout.NORTH );

        ResultViewer viewer = new ResultViewer();
        panel.add( viewer , BorderLayout.CENTER );

        //==================================================================-
        // ItemManagerは抽象クラスObservableを継承したものになっている
        //==================================================================-
        ItemManager im = ItemManager.getInstance();
        im.addObserver( viewer );
    }

    /**
    * 照会結果を表示するインナークラス
    */
    private class ResultViewer extends TSCommonPanel implements ActionListener, Observer {

        private JComboBox filterComboBox;

        /** アイテム一覧を表示するテーブル */
        private JTable table;

        public ResultViewer() {

            Object[] names = new Object[] {
                                 "AVAILABLE",
                                 "AVAILABLE_BEFORE_CHECK_OUT",
                                 "UNAVAILABLE",
                                 "CREATED",
                                 "CHECK_IN",
                                 "CHECK_OUT",
                                 "NEEDS_REPAIRMENT",
                                 "REPAIRED",
                                 "DISPOSED"
                             };

            filterComboBox = new JComboBox( names );
            filterComboBox.setMaximumRowCount( names.length );
            filterComboBox.addActionListener( this );
            filterComboBox.setActionCommand( "CHANGE_ITEMTYPE" );

            JPanel panel4comboBox = new JPanel();
            panel4comboBox.add( new JLabel( "ステータス" ) );
            panel4comboBox.add( filterComboBox );
            addComponent( panel4comboBox, 0, 0, 1, 1 );

            //アイテムを表示するためのJTable
            table = new JTable( );
            table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
            JScrollPane sp = new JScrollPane( table );
            sp.setPreferredSize( new Dimension( 920, 360 ) );
            addComponent( sp, 0, 1, 1, 1 );

            // 行を選択したときのリスナーを設定
            table.addMouseListener( new QueryResultRowChooser() );

            retrieveItems();
        }

        public void actionPerformed( ActionEvent event ) {

            String command = event.getActionCommand();
            System.out.println( "COMAND: " + command );

            retrieveItems();
        }

        public void update( Observable obj, Object arg ) {
            System.out.println( "in " + this.getClass().getName() + " -- update()" );
            retrieveItems();
        }

        /** アイテムを全て列挙する */
        private void retrieveItems() {
            // System.out.println( "retrieveItems()" );

            String selectedStatus = ( String ) filterComboBox.getSelectedItem();
            System.out.println( "選択されたステータス: " + selectedStatus );

            DefaultTableModel model = QueryResultRetriever.retrieve( selectedStatus );

            TableSorter sorter = new TableSorter( model );
            table.setModel( sorter );
            sorter.setTableHeader( table.getTableHeader() );

            // 各カラムの表示幅を指定する
            int[] width = new int[ 6 ];
            width[ 0 ] = 100;
            width[ 1 ] = 100;
            width[ 2 ] = 0;	// ステータスは表示しない
            width[ 3 ] = 120; // 登録日付
            width[ 4 ] = 120; // 更新日付
            width[ 5 ] = 100;
            for ( int i = 0;i < width.length;i++ ) {
                TableColumn col = table.getColumnModel().getColumn( i );
                col.setMinWidth( width[ i ] );
                col.setMaxWidth( width[ i ] );
            }

            this.validate();
            this.repaint();
        }
    }
}
戻る inserted by FC2 system