【Swing】Oracleに接続して取得したデータをJTable に表示してみる
おはようございます。
前回に引き続き、Swingを弄ってみます。
今回はWPFの時と同様、猫の一覧を表示しました。
プログラムは前回のものを流用します。
スポンサーリンク
画面の変更
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 && 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); }
起動してみる
起動後の画面です。
検索条件を指定しないで検索した結果。
名前を指定して検索した結果。
種別を指定して検索した結果。
まとめ
Swingはひとまずここまでにするかもしれません。
次回は Java FX なんかもやってみようかなーとか思っています。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません