以前に作成した、スクリプトのJava8対応
https://github.com/kurokouji/jdbcswingquery
XF000から開いたSQL出力のwindowが次の指定では、閉じられなかった。
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
※2015-08-08 追記
「f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);」を
コメントアウトしたら、閉じることができるようになった。
原因がわかったら、問題点を整理してGithubに上げます。
var obj = new JDBCSwingQuery(); ///////////////////////////////// // JDBCSwingQuery // ///////////////////////////////// function JDBCSwingQuery() { var importedPackage = new JavaImporter(java.awt, javax.swing, javax.swing.table, java.sql, java.util); with (importedPackage) { var persistMgr; var rs ; var model; var strsql; strsql = setSqlString(); // ダミーのSQLをセットする try { persistMgr = new PersistenceManager(); rs = persistMgr.executeSQL(strsql); model = new DataModel(rs); } catch (e) { showMessage(e); return; } ////////////////////////// // ダイアログ要素の設定 // ////////////////////////// var f = new JFrame() ; var table = new JTable(); table.setModel(model); var scrollpane = new JScrollPane(table); // コンポーネントの作成 var queryField = new JTextField(strsql); var queryButton = new JButton("Submit"); var panel = new JPanel(); panel.setLayout(new GridLayout(2, 1)); panel.add(queryField); panel.add(queryButton); // コンテント・ペインの取得 var cont = f.getContentPane(); // コンテント・ペインに追加 cont.add(panel, BorderLayout.NORTH); cont.add(scrollpane, BorderLayout.CENTER); // JFrame の作成 f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); f.setTitle("JDBCSwingQuery"); f.pack(); f.setVisible(true); //////////////////////// // イベント、再クエリ // //////////////////////// queryButton.addActionListener(function(){ strsql = queryField.getText(); try { rs = persistMgr.executeSQL(strsql); model = new DataModel(rs); } catch (e) { showMessage(e); return; } table.setModel(model); }); } } ///////////////////////////////// // PersistenceManager // ///////////////////////////////// function PersistenceManager() { var importedPackage = new JavaImporter( java.sql); with (importedPackage) { var conn; var stmt; var SQL = ""; try { // データベースへの接続 java.lang.Class.forName("org.postgresql.Driver"); conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/skeleton", "postgres", "password"); stmt = conn.createStatement(); } catch (e) { showMessage(e); } this.executeSQL = function(str){ try { if (stmt.execute(str)) { // SQL ステートメントの発行 SQL = str; return stmt.getResultSet(); } else { return stmt.executeQuery(SQL); } } catch (e) { showMessage(e); return stmt.executeQuery(SQL); } } this.dbClose = function() { //データベースを切断する conn.Close(); conn = null; } } } ///////////////////////////////// // DataModel // ///////////////////////////////// function DataModel(rset) { var importedPackage = new JavaImporter(javax.swing.table, java.util); with (importedPackage) { var metaData; var columnNames; var rows; var numberOfColumns; var numberOfRows; metaData = rset.getMetaData(); // ResultSetのメタデータの取得 numberOfColumns = metaData.getColumnCount(); // 列数を取得 columnNames = new Vector(); // 列名を保持するベクトル for(column = 0; column < numberOfColumns; column++) { columnNames.addElement(metaData.getColumnLabel(column + 1)); // 列名を取得 // showMessage(metaData.getColumnLabel(column + 1)); } rows = new Vector(); // ResultSet全体のデータを保持するベクトル while (rset.next()) { newRow = new Vector(); // ResultSetの一行分のデータを保持するベクトル for ( var i = 1; i <= numberOfColumns; i++) { newRow.addElement(rset.getObject(i)); // 各データを取得し追加 } rows.addElement(newRow); // 各行を追加 } numberOfRows = rows.size(); showMessage(numberOfRows + "レコード取得しました。"); //TableModelインターフェースとは //http://www.javadrive.jp/tutorial/jtable/index7.html //DefaultTableModel(Vector data, Vector columnNames) //DefaultTableModel を構築し、data と columnNames を setDataVector メソッドに渡すことにより、テーブルを初期化します model = new DefaultTableModel(rows, columnNames); return model; }} ///////////////////////////////// // setSqlString // ///////////////////////////////// function setSqlString() { var strSQL = "\ select * from zt051 ;" return strSQL; }