Javaと情熱のあいだ

カステラとドーナツと珈琲

JTableで使用するBeanTableModelを実装するサンプル

JTableを使ってて、ListにつめたBeanを設定できたらなーと思って
BeanTableModelを実装。
使い方は、Listとパラメタ名配列を渡すだけ。
材料はこちら
org.apache.commons.beanutils

/**
 * <HR>
 * <P>
 *  ■モジュール名 <BR>
 * <BLOCKQUOTE>
 *      Frame.java <BR>
 * </BLOCKQUOTE>
 * <P>
 *  ■クラス仕様 <BR>
 * <BLOCKQUOTE>
 *      JframeExampleクラスはJFrameのサンプルクラスです。<BR>
 * </BLOCKQUOTE>
 * <P>
 * <HR>
 * <P>
 */
public class Frame {

    /**
     *
     * 実行。
     * @throws Exception 例外
     */
    public void execute() throws Exception {
        JFrameTest frame = new JFrameTest();

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("TestFrame");
        frame.setBounds( 10, 10, 300, 200);
        frame.setVisible(true);

        frame.setSize(200, 200);

    }

    /**
     *
     * <HR>
     * <P>
     *  ■モジュール名 <BR>
     * <BLOCKQUOTE>
     *      JFrameTest.java <BR>
     * </BLOCKQUOTE>
     * <P>
     *  ■クラス仕様 <BR>
     * <BLOCKQUOTE>
     *      JFrameTestクラスはテストフレームクラスです。<BR>
     * </BLOCKQUOTE>
     * <P>
     * <HR>
     * <P>
     */
    public static class JFrameTest extends JFrame {

        /**
         * シリアル
         */
        private static final long serialVersionUID = 1L;

        /**
         *
         * コンストラクタ
         */
        public JFrameTest() {

            final TestBean tb = new TestBean();

            final List<TestBean> list = new ArrayList<TestBean>();

            tb.setHoge("hoge");

            tb.setHogehoge("hogehoge");

            tb.setPiyo(1);

            list.add(tb);
            list.add(tb);
            list.add(tb);
            list.add(tb);


            JTable table = new JTable(new BeanTableModel(list, new
String[]{"hoge", "hogehoge", "piyo"}));

            JScrollPane sp = new JScrollPane(table);

            sp.setPreferredSize(new Dimension(250, 70));

            JPanel p = new JPanel();

            p.add(sp);

            getContentPane().add(p, BorderLayout.PAGE_START);
        }
    }

    /**
     *
     * <HR>
     * <P>
     *  ■モジュール名 <BR>
     * <BLOCKQUOTE>
     *      TestBean.java <BR>
     * </BLOCKQUOTE>
     * <P>
     *  ■クラス仕様 <BR>
     * <BLOCKQUOTE>
     *      TestBeanクラスはBeanのサンプルクラスです。<BR>
     * </BLOCKQUOTE>
     * <P>
     * <HR>
     * <P>
     */
    public static class TestBean {

        /**
         *
         */
        private String hoge;

        /**
         *
         */
        private String hogehoge;

        /**
         *
         */
        private int piyo;

        /**
         * を取得します。
         * @return
         */
        public String getHoge() {
            return hoge;
        }

        /**
         * を設定します。
         * @param hoge
         */
        public void setHoge(String hoge) {
            this.hoge = hoge;
        }

        /**
         * を取得します。
         * @return
         */
        public String getHogehoge() {
            return hogehoge;
        }

        /**
         * を設定します。
         * @param hogehoge
         */
        public void setHogehoge(String hogehoge) {
            this.hogehoge = hogehoge;
        }

        /**
         * を取得します。
         * @return
         */
        public int getPiyo() {
            return piyo;
        }

        /**
         * を設定します。
         * @param piyo
         */
        public void setPiyo(int piyo) {
            this.piyo = piyo;
        }


    }

    /**
     * <HR>
     * <P>
     *  ■モジュール名 <BR>
     * <BLOCKQUOTE>
     *      BeanTableModel.java <BR>
     * </BLOCKQUOTE>
     * <P>
     *  ■クラス仕様 <BR>
     * <BLOCKQUOTE>
     *      BeanTableModelクラスはListに入れたBesnをそのまま使いたいクラ
スです。<BR>
     * </BLOCKQUOTE>
     * <P>
     * <HR>
     * <P>
     */
    public static class BeanTableModel extends AbstractTableModel {

        /**
         * シリアル
         */
        private static final long serialVersionUID = 1L;

        /**
         * カラム名
         */
        private String[] columnNames;

        /**
         * データリスト
         */
        private List dataList;

        /**
         *
         * 列数を取得します。
         * @return
         */
        public int getColumnCount() {
            return columnNames.length;
        }

        /**
         *
         * 行数を取得します。
         * @return
         */
        public int getRowCount() {
            return dataList.size();
        }

        /**
         *
         * 指定し行列のオブジェクトを取得します。
         * @param rowIndex 行番号
         * @param columnIndex 列番号
         * @return
         */
        public Object getValueAt(int rowIndex, int columnIndex) {
            try {
                return PropertyUtils.getProperty(dataList.get(rowIndex),
columnNames[columnIndex]);
            } catch (Exception e) {
                e.printStackTrace();
            }

            return null;
        }

        /**
         *
         * コンストラクタ
         * @param dataList データリスト
         * @param columnNames カラム名
         */
        public BeanTableModel(final List dataList, final String[]
columnNames) {
            this.dataList = dataList;
            this.columnNames = columnNames;
        }
    }
}

一個のクラスに全部詰め込んだので見難いかも。