- ベストアンサー
Swing/JTableのカラム幅が変更されたときのイベントについて
ユーザーからそのJTableのカラム幅が変更されたときに、 特別な処理を行いたいのですが、方法の検討がつきません。 たとえば、ユーザーがカラム幅を変更したとき、それをテーブルに表示する。 ということをしたいのです カラム幅が変更されたときに呼び出されるリスナがあればいいのですが・・・ 方法がわかる方がいらっしゃいましたらよろしくお願いします
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
D列のイベントを所得して、その列幅を2行目の出力しています。 その要点は、 (1)addPropertyChangeListener()で、イベントを取得し、 (2)e.getPropertyName().equals("width")で、当該イベントを識別し、 (3)e.getNewValue()で、列幅を取得する ということです。 下にサンプルコードを示します。 どの程度説明が必要かわかりませんので、より詳細な説明が必要でしたら、具体的にご質問ください。 Actionインターフェース,MVCパターン等について知識がないと、全く不可解かも知れません。 import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; /** * Table幅イベントサンプル */ public class ColumnWidthEventSample { private JTable table; public ColumnWidthEventSample() { table = new JTable(); table.setModel( new DefaultTableModel(50,10) ); table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF ); PropertyChangeListener listener = new ColumnWidthChangeListener(); table.getColumnModel().getColumn(3).addPropertyChangeListener( listener ); table.setValueAt( "列幅は", 0, 3 ); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add( new JScrollPane( table ) ); frame.setSize( 400, 400 ); frame.setVisible( true ); } private class ColumnWidthChangeListener implements PropertyChangeListener { public void propertyChange(PropertyChangeEvent e) { if( e.getPropertyName().equals("width") ) { table.setValueAt(e.getNewValue(), 1, 3); } } } public static void main(String[] args) { new ColumnWidthEventAample(); } }
お礼
MVCパターンというのはよくわかりませんでしたが、 ソースコードについては理解できました。ありがとうございます。 リスナをJTableに追加することばかり考えていて Columnに追加することを思いつきませんでした。 PropertyChangeListenerを使うのは初めてですがAPIをみたら なんとなくわかりました また質問させていただくこともあるかと思いますが 今回はどうもありがとうございました