前提・実現したいこと
SQLで郵便番号のデータベース(No.,郵便番号,県,市,地区,県の読み,市の読み,地区の読み)を用いて距離を出すプログラムを作っている最中です。
とりあえず住所を三つ表示させたいです。
発生している問題・エラーメッセージ
距離を出す以前に、三地点の情報を出すため検索機能を作っているのですが、一個目を表示した後、ボタンやテキストフィールドをクリックしても反応がされません。
該当のソースコード
Java
html
1コードの表示(ブロック) 2public class postNumberGUI extends Frame implements ActionListener, ItemListener { 3 java.awt.List codeList; 4 int n=3; 5 int a=0; 6 int x=0; 7 TextField[] codeField = new TextField[n]; 8 TextField[] numberField = new TextField[n];・・・ 9 TextField serchField; 10 11 Button displayButton,・・・ 12 Panel panel, ・・・ 13 //Panel[] dataPanel; 14 String displayCommand = "Display", 15 addCommand = "Add", 16 serchCommand = "Serch", 17 doneCommand = "Done"; 18// updateCommand = "Update",addCommand = "Add", deleteCommand = "Delete"; // ボタンのコマンド文字列 19 20 String driverClassName = "org.postgresql.Driver"; //SQL 21 String url = "jdbc:postgresql://localhost/test"; 22 String user = "dbpuser"; 23 String password = "hogehoge"; 24 Connection connection; 25 ResultSet resultSet; 26 27 28 //郵便番号で検索 29 30PreparedStatement prepStmt; // SELECT name 用 (リスト表示) 31PreparedStatement prepStmt_S; // SELECT用 32 33String selectStr = "SELECT code FROM postalcode"; 34String strPrepSQL_S = "SELECT * FROM postalcode WHERE code = ?"; 35 36 postNumberGUI(){ 37 setSize(1200,1000); 38 setTitle("postNumberGUI"); 39 setLayout(new GridLayout(1,2)); 40 System.out.println(a); 41 42 panel = new Panel(); 43 panel.setLayout(new BorderLayout()); 44 add(panel); 45 46 leftPanel = new Panel(); 47 leftPanel.setLayout(new GridLayout()); 48 add(leftPanel); 49 50 codeList = new java.awt.List(10); 51 codeList.addItemListener(this); 52 leftPanel.add(codeList); 53 54 55 rightPanel = new Panel(); 56 rightPanel.setLayout(new GridLayout(2,4)); 57 add(rightPanel); 58 59 dataPanel1 = new Panel(); 60 dataPanel1.setLayout(new GridLayout(8,2)); 61 rightPanel.add(dataPanel1); 62 63 dataPanel2 = new Panel(); 64 dataPanel2.setLayout(new GridLayout(8,2)); 65 rightPanel.add(dataPanel2); 66 67 dataPanel3 = new Panel(); 68 dataPanel3.setLayout(new GridLayout(8,2)); 69 rightPanel.add(dataPanel3); 70 71 serchPanel = new Panel(); 72 serchPanel.setLayout(new BorderLayout()); 73 //rightPanel.add(serchPanel); 74 75 buttonPanel = new Panel(); 76 buttonPanel.setLayout(new GridLayout(2,2)); 77 rightPanel.add(buttonPanel); 78 79 panel.add(leftPanel, BorderLayout.WEST); 80 panel.add(rightPanel, BorderLayout.CENTER); 81 82 83 for(int i=0;i<n;i++) { 84 if(i==0){ 85 dataPanel1.add(new Label("郵便番号")); 86 codeField[i] = new TextField(24); 87 dataPanel1.add(codeField[i]); 88 89 dataPanel1.add(new Label("Number")); 90 numberField[i] = new TextField(24); 91 dataPanel1.add(numberField[i]);・・・ 92 }else if(i==1){ 93 dataPanel2.add(new Label("郵便番号")); 94 codeField[i] = new TextField(24); 95 dataPanel2.add(codeField[i]);・・・ 96 }else if(i==2){ 97 dataPanel3.add(new Label("郵便番号")); 98 codeField[i] = new TextField(24); 99 dataPanel3.add(codeField[i]);・・・ 100 } 101 } 102 serchPanel.add(new Label("検索")); 103 serchField = new TextField(24); 104 serchPanel.add(serchField, BorderLayout.CENTER); 105 106 doneButton = new Button(doneCommand); 107 doneButton.addActionListener(this); 108 buttonPanel.add(doneButton); 109 110 displayButton = new Button(displayCommand); 111 displayButton.addActionListener(this); 112 buttonPanel.add(displayButton); 113 114 addButton = new Button(addCommand); 115 addButton.addActionListener(this); 116 buttonPanel.add(addButton); 117 118 serchButton = new Button(serchCommand); 119 serchButton.addActionListener(this); 120 serchPanel.add(serchButton, BorderLayout.EAST); 121 122 rightPanel.add(serchPanel); 123 124 addWindowListener ( new WindowAdapter() { 125 public void windowClosing(WindowEvent we) { 126 try { // 後処理 127 prepStmt.close(); 128 prepStmt_S.close(); 129 connection.close(); 130 } catch (Exception e) { 131 e.printStackTrace(); 132 } 133 System.exit(0); 134 } 135 } ) ; // ウィンドウを閉じる処理 136 137 try { // ドライバマネージャとコネクション 138 Class.forName(driverClassName); 139 connection = DriverManager.getConnection(url, user, password); 140 141 prepStmt = connection.prepareStatement(selectStr); 142 prepStmt_S = connection.prepareStatement(strPrepSQL_S); 143 } catch (Exception e) { 144 e.printStackTrace(); 145 } 146 displayList(); // 早速リストに名前表示 147 148 } 149 150public void itemStateChanged(ItemEvent ie) { // 選択項目が変化した時の処理 151 displayData(); // 各フィールドにデータ表示 152} 153public void clearList() { // リストクリア 154 codeList.removeAll(); // リストの項目をすべて削除 155} 156 157public void displayList() { // リスト項目表示 158 try { 159 resultSet = prepStmt.executeQuery(); // コードの列だけ抜き出す 160 while (resultSet.next()) { 161 String code = resultSet.getString("code"); 162 codeList.add(code); // リストにコードを追加 163 } 164 resultSet.close(); 165 } catch (Exception e) { 166 e.printStackTrace(); 167 } 168} 169 170public void displayData() { // 選択項目データ再表示 171 String code = codeList.getSelectedItem(), // 名前はリストの選択項目 172 number = "", 173 prefecture = "", 174 city = "", 175 area = "", 176 pref_reading = "", 177 city_reading = "", 178 area_reading = ""; 179 try { 180 prepStmt_S.setString(1, code); 181 resultSet = prepStmt_S.executeQuery(); 182 while (resultSet.next()) { 183 code = resultSet.getString("code");・・・; 184 } 185 while(0<=a&&a<=2) { 186 codeField[a].setText(code); 187 numberField[a].setText(number);・・・; 188 resultSet.close(); 189 } 190 } catch (Exception e) { 191 e.printStackTrace(); 192 } 193} 194 195public void serchData() { // 項目データ追加 196 String code = codeList.getSelectedItem(), // 名前はリストの選択項目 197 number = "", 198 prefecture = "", 199 city = "", 200 area = "", 201 pref_reading = "", 202 city_reading = "", 203 area_reading = ""; 204 code = serchField.getText(); // 各データをもらう 205 206 serchField.setText(""); 207 try { // 新データを追加 208 prepStmt_S.setString(1, code); 209 resultSet = prepStmt_S.executeQuery(); 210 while (resultSet.next()) { 211 code = resultSet.getString("code");・・・; 212 } 213 while(0<=a&&a<=2) { 214 codeField[a].setText(code); ・・・; 215 resultSet.close(); 216 } 217 } catch (Exception e) { 218 e.printStackTrace(); 219 } 220} 221 222 public void actionPerformed(ActionEvent ae) { // ボタンが押された時に行う処理 223 String command = ae.getActionCommand(); // イベントからアクションコマンドを得る 224 if (command.equals(displayCommand)) { 225 displayData(); // 表示処理 226 }else if(command.equals(doneCommand)) { 227 a++; 228 System.out.println(a); 229 }else if(command.equals(serchCommand)) { 230 serchData(); 231 a++; 232 System.out.println(a); 233 } 234 } 235 public static void main(String[] argv) { 236 postNumberGUI myFrame = new postNumberGUI(); // フレームの生成 237 myFrame.setVisible(true); // フレームの可視化 238 } 239}
試したこと
データベースのリスト表示が重いのかと思い、コメントアウトしましたが、一つ検索して表示後、反応しなくなりました。
(コードが乱雑なのも関係ありそうです、、)
補足情報(FW/ツールのバージョンなど)
eclipseを使っています。
また今後グーグルのAPIで地点の中間地点を出すものを扱いたいのですが、APIの実装方法がわからないのでよろしければご教授お願いします。
あなたの回答
tips
プレビュー