2020-01-09に投稿

【Swing】Oracleに接続して取得したデータをJTable に表示してみる

前回に引き続き、Swingを弄ってみます。
今回はWPFの時と同様、猫の一覧を表示しました。

プログラムは前回のものを流用します。
【Swing】Oracleに接続して取得したデータをコンボボックスに設定する

画面の変更

JTableの配置

JScrollPane、JTableを配置します。
こうすることにより、JTableにヘッダー、スクロールバーが表示されるようになります。

プログラムの修正

新規クラス(インナー)の追加

検索ボタン押下時の処理を追加します。
イベントは、「ActionListener」を実装したクラスで行います。

MainForm.java

            /**
             * 検索ボタンアクションリスナークラス
             *
             * @author doraxdora
             *
             */
            public class SearchActionListener implements ActionListener {

                    /**
                     * イベントハンドラ.
                     *
                     */
                    @Override
                    public void actionPerformed(ActionEvent event) {
                            if (event.getSource().equals(btnSearch)) {

                                    try {

                                            // SQL文の組み立て
                                            // 画面で指定された条件を組み込む
                                            String sql = "SELECT C.NO"
                                                            + ", C.NAME"
                                                            + ", C.SEX"
                                                            + ", C.AGE"
                                                            + ", K.KIND_NAME"
                                                            + ", C.FAVORITE"
                                                            + " FROM TBLCAT C"
                                                            + " LEFT OUTER JOIN MSTKIND K ON ("
                                                            + "  C.KIND_CD = K.KIND_CD"
                                                            + " )";
                                            String where = "";

                                            String searchName = txSearchName.getText();
                                            if (searchName != null && !searchName.equals("")) {
                                                    where = " WHERE C.NAME LIKE '" + searchName + "%'";
                                            }
                                            String searchKind = (String)cbSearchKind.getSelectedItem();
                                            if (searchKind != null && !searchKind.equals("指定なし")) {
                                                    if (where != "") {
                                                            where += " AND";
                                                    } else {
                                                            where += " WHERE";
                                                    }
                                                    where += " K.KIND_NAME = '" + searchKind + "'";
                                            }
                                            sql += where;
                                            sql += " ORDER BY C.NO";

                                            // データを取得し、JTableにセットする TableModel の形に編集
                                            DBAccess dba = new DBAccess();
                                            ResultSet rs = dba.executeQuery(sql);
                                            List<String[]> list = new ArrayList<String[]>();
                                            while (rs != null &amp;&amp; rs.next()) {
                                                    String[] items = new String[6];
                                                    items[0] = rs.getString("NO");
                                                    items[1] = rs.getString("NAME");
                                                    items[2] = rs.getString("SEX");
                                                    items[3] = rs.getString("AGE");
                                                    items[4] = rs.getString("KIND_NAME");
                                                    items[5] = rs.getString("FAVORITE");
                                                    list.add(items);
                                            }

                                            // JTable にセット
                                            String[] columnHeader = {"No","名前","性別","年齢","種別","好物"};
                                            DefaultTableModel tm = new DefaultTableModel((String[][])list.toArray(new String[0][0]), columnHeader);
                                            tblCatData.setModel(tm);

                                    } catch (Exception e) {
                                            System.out.println(e.getMessage());
                                    }

                            }
                    }
            }


 

初期化処理の修正

少し整理しました。
あとは検索ボタン押下時の処理に、作成したクラスをセットします。

MainForm.java

        /**
         * 画面生成処理.
         *
         */
        public MainForm() {

                // メインパネル
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                setBounds(100, 100, 480, 304);
                mainPanel = new JPanel();
                mainPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
                setContentPane(mainPanel);
                mainPanel.setLayout(new BorderLayout(0, 0));

                JPanel panel = new JPanel();
                FlowLayout flowLayout = (FlowLayout) panel.getLayout();
                flowLayout.setHgap(10);
                flowLayout.setAlignment(FlowLayout.LEFT);
                mainPanel.add(panel, BorderLayout.NORTH);

                // 名前ラベル
                JLabel label = new JLabel("名前:");
                panel.add(label);

                // 名前テキストボックス
                txSearchName = new JTextField();
                panel.add(txSearchName);
                txSearchName.setColumns(10);

                // 種別ラベル
                JLabel label_1 = new JLabel("種別:");
                panel.add(label_1);

                // 種別コンボボックス
                cbSearchKind = new JComboBox<String>();
                cbSearchKind.setMinimumSize(new Dimension(100, 19));
                cbSearchKind.setBounds(195, 7, 119, 19);
                panel.add(cbSearchKind);

                // 検索ボタン
                btnSearch = new JButton("検索");
                // 検索ボタン押下時の処理としてインナークラスをセット
                btnSearch.addActionListener(new SearchActionListener());
                panel.add(btnSearch);

                // スクロールパネル
                // JTableは基本スクロールパネルとセットで使用する
                // 縦横のスクロールおよび、ヘッダが表示されるようになります。
                scrollPane = new JScrollPane();
                mainPanel.add(scrollPane, BorderLayout.CENTER);

                // 猫一覧テーブル
                tblCatData = new JTable();
                tblCatData.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
                scrollPane.setViewportView(tblCatData);
        }

 

起動してみる

起動後画面

起動後の画面です。

検索結果1

検索条件を指定しないで検索した結果。

検索結果2

名前を指定して検索した結果。

検索結果3

種別を指定して検索した結果。

まとめ

Swingはひとまずここまでにするかもしれません。
次回は Java FX なんかもやってみようかなーとか思っています。

ではでは。

Originally published at www.doraxdora.com
ツイッターでシェア
みんなに共有、忘れないようにメモ

doraxdora

IT関係の仕事をしています/1985年生まれの東京在住/便利なサービスやツール漁りや料理などが好き/2017年~ブログやってます/自分でサービスとか作ってリリースしたい/何かありましたらお気軽にDMどうぞ

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント