【Swing】Oracleに接続して取得したデータをJTable に表示してみる
おはようございます。
前回に引き続き、Swingを弄ってみます。
今回はWPFの時と同様、猫の一覧を表示しました。
プログラムは前回のものを流用します。
スポンサーリンク
画面の変更
JScrollPane、JTableを配置します。
こうすることにより、JTableにヘッダー、スクロールバーが表示されるようになります。
プログラムの修正
新規クラス(インナー)の追加
検索ボタン押下時の処理を追加します。
イベントは、「ActionListener」を実装したクラスで行います。
MainForm.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | /** * 検索ボタンアクションリスナークラス * * @author doraxdora * */ publicclassSearchActionListenerimplementsActionListener{ /** * イベントハンドラ. * */ @Override publicvoidactionPerformed(ActionEvent event){ if(event.getSource().equals(btnSearch)){ try{ // SQL文の組み立て // 画面で指定された条件を組み込む Stringsql="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" +" )"; Stringwhere=""; StringsearchName=txSearchName.getText(); if(searchName!=null&& !searchName.equals("")) { where = " WHERE C.NAME LIKE '" + searchName + "%'"; } StringsearchKind=(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=newDBAccess(); ResultSet rs=dba.executeQuery(sql); List<String[]>list=newArrayList<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=newDefaultTableModel((String[][])list.toArray(newString[0][0]),columnHeader); tblCatData.setModel(tm); }catch(Exceptione){ System.out.println(e.getMessage()); } } } } |
初期化処理の修正
少し整理しました。
あとは検索ボタン押下時の処理に、作成したクラスをセットします。
MainForm.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | /** * 画面生成処理. * */ publicMainForm(){ // メインパネル setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100,100,480,304); mainPanel=newJPanel(); mainPanel.setBorder(newEmptyBorder(5,5,5,5)); setContentPane(mainPanel); mainPanel.setLayout(newBorderLayout(0,0)); JPanel panel=newJPanel(); FlowLayout flowLayout=(FlowLayout)panel.getLayout(); flowLayout.setHgap(10); flowLayout.setAlignment(FlowLayout.LEFT); mainPanel.add(panel,BorderLayout.NORTH); // 名前ラベル JLabel label=newJLabel("名前:"); panel.add(label); // 名前テキストボックス txSearchName=newJTextField(); panel.add(txSearchName); txSearchName.setColumns(10); // 種別ラベル JLabel label_1=newJLabel("種別:"); panel.add(label_1); // 種別コンボボックス cbSearchKind=newJComboBox<String>(); cbSearchKind.setMinimumSize(newDimension(100,19)); cbSearchKind.setBounds(195,7,119,19); panel.add(cbSearchKind); // 検索ボタン btnSearch=newJButton("検索"); // 検索ボタン押下時の処理としてインナークラスをセット btnSearch.addActionListener(newSearchActionListener()); panel.add(btnSearch); // スクロールパネル // JTableは基本スクロールパネルとセットで使用する // 縦横のスクロールおよび、ヘッダが表示されるようになります。 scrollPane=newJScrollPane(); mainPanel.add(scrollPane,BorderLayout.CENTER); // 猫一覧テーブル tblCatData=newJTable(); tblCatData.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); scrollPane.setViewportView(tblCatData); } |
起動してみる
起動後の画面です。
検索条件を指定しないで検索した結果。
名前を指定して検索した結果。
種別を指定して検索した結果。
まとめ
Swingはひとまずここまでにするかもしれません。
次回は Java FX なんかもやってみようかなーとか思っています。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません