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();
}
}
}
戻る