前回に引き続き、Swingを弄ってみます。
今回はWPFの時と同様、猫の一覧を表示しました。
プログラムは前回のものを流用します。
【Swing】Oracleに接続して取得したデータをコンボボックスに設定する
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 なんかもやってみようかなーとか思っています。
ではでは。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント