アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
SQL文で発行された内容をJListでリスト化して表示したいです。
コマンドライン上で内容を表示することは出来ていますが、上手くGUIで表示できません。
簡単に言えば、以下の2つのプログラムを組み合わせたいです。宜しくお願い致します。

// JListプログラム //
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;

class JListTest extends JFrame implements ListSelectionListener {
JListTest() {
getContentPane().setLayout(new FlowLayout());

String[] data = { "ListA", "ListB", "ListC", "ListD" };
JList lst = new JList(data);
lst.addListSelectionListener(this);
getContentPane().add(lst);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("JListTest");
setSize(200, 120);
setVisible(true);
}
public void valueChanged(ListSelectionEvent e) {
JList lst = (JList)e.getSource();
System.out.println(lst.getSelectedValue());
}
public static void main(String[] args) {
new JListTest();
}
}

// SQLプログラム //
import java.sql.*;
class DbTest {
public static void main(String[] args) {
int id;
String name;
try {
// JDBCドライバの登録
String driver = "org.postgresql.Driver";
// データベースの指定
String server = "192.168.1.0"; // PostgreSQL サーバ ( IP または ホスト名 )
String dbname = "test"; // データベース名
String url = "jdbc:postgresql://" + server + "/" + dbname;
String user = "test"; //データベース作成ユーザ名
String password = "xxxxxxxxxx"; //データベース作成ユーザパスワード
Class.forName (driver);
// データベースとの接続
Connection con = DriverManager.getConnection(url, user, password);
// テーブル照会実行
Statement stmt = con.createStatement ();
String sql = "SELECT * FROM test";
ResultSet rs = stmt.executeQuery (sql);
// テーブル照会結果を出力
while(rs.next()){
id = rs.getInt("num");
name = rs.getString("name");
System.out.println(id);
System.out.println(name);
}
// データベースのクローズ
rs.close();
stmt.close();
con.close();
} catch (SQLException e) {
System.err.println("SQL failed.");
e.printStackTrace ();
} catch (ClassNotFoundException ex) {
ex.printStackTrace ();
}
}
}

A 回答 (1件)

Swingの一部のGUIでは表示用のクラスとデータ用のクラスを合わせて使うものがあります。


そのひとつがJListです。データ用のクラスはカスタマイズが可能ですが、とりあえず用に
javax.swing.DefaultListModelというクラスが用意されています。
これをJListのコンストラクタに指定するとDBのデータをJListに反映させることができます。
表示データを操作したいときはJListではなくDefaultListModelのオブジェクトを操作します。

たとえば、DBのデータをArrayList<String> dbdtaというコレクションに格納したとします。

//GUIの初期化
DefaultListModel dlm = new DefaultListModel();  //リストモデルの作成
JList list=new JList(dlm);  //リストモデルを使用したGUIの作成

//データの反映
for(String str:dbdata){
  dlm.addElement(str);  //項目の追加
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!