Java 动态向 JTable 中添加数据
1 import java.awt.Toolkit; 2 import javax.swing.SwingUtilities; 3 import javax.swing.UIManager; 4 import java.awt.Dimension; 5 public class JTableAppClass { 6 boolean packFrame = false; 7 8 public JTableAppClass() { 9 JTableAppFrame frame = new JTableAppFrame(); 10 // Validate frames that have preset sizes 11 // Pack frames that have useful preferred size info, e.g. from their layout 12 if (packFrame) { 13 frame.pack(); 14 } else { 15 frame.validate(); 16 } 17 // Center the window 18 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 19 Dimension frameSize = frame.getSize(); 20 if (frameSize.height > screenSize.height) { 21 frameSize.height = screenSize.height; 22 } 23 if (frameSize.width > screenSize.width) { 24 frameSize.width = screenSize.width; 25 } 26 frame.setLocation((screenSize.width - frameSize.width) / 2, 27 (screenSize.height - frameSize.height) / 2); 28 frame.setVisible(true); 29 } 30 31 public static void main(String[] args) { 32 SwingUtilities.invokeLater(new Runnable() { 33 public void run() { 34 try { 35 UIManager.setLookAndFeel(UIManager. 36 getSystemLookAndFeelClassName()); 37 } catch (Exception exception) { 38 exception.printStackTrace(); 39 } 40 new JTableAppClass(); 41 } 42 }); 43 } 44 } 45 操作类:JTableAppFrame.java 46 package jtabletest; 47 import java.awt.Dimension; 48 import javax.swing.JFrame; 49 import javax.swing.JPanel; 50 import javax.swing.JTable; 51 import java.awt.Rectangle; 52 import javax.swing.JScrollPane; 53 import java.util.Vector; 54 import java.sql.*; 55 import java.util.ArrayList; 56 import javax.swing.JLabel; 57 import javax.swing.JTextField; 58 import java.awt.Font; 59 import javax.swing.JButton; 60 import java.awt.event.ActionEvent; 61 import java.awt.event.ActionListener; 62 import javax.swing.JOptionPane; 63 public class JTableAppFrame extends JFrame { 64 JPanel contentPane; 65 Vector CellsVector = new Vector(); 66 Vector TitleVector = new Vector(); 67 JScrollPane scp = new JScrollPane(); 68 JTable tab = null; 69 DBCon dbcon = new DBCon(); 70 JLabel lbl_name = new JLabel(); 71 JLabel lbl_age = new JLabel(); 72 JLabel lbl_address = new JLabel(); 73 JTextField txt_name = new JTextField(); 74 JTextField txt_age = new JTextField(); 75 JTextField txt_address = new JTextField(); 76 JButton btn_add = new JButton(); 77 JButton btn_del = new JButton(); 78 JButton btn_update = new JButton(); 79 JButton btn_reset = new JButton(); 80 public JTableAppFrame() { 81 try { 82 setDefaultCloseOperation(EXIT_ON_CLOSE); 83 jbInit(); 84 } catch (Exception exception) { 85 exception.printStackTrace(); 86 } 87 } 88 89 private void jbInit() throws Exception { 90 contentPane = (JPanel) getContentPane(); 91 contentPane.setLayout(null); 92 this.setResizable(false); 93 setSize(new Dimension(400, 340)); 94 setTitle("JTable"); 95 scp.setBounds(new Rectangle(46, 32, 297, 157)); 96 lbl_name.setFont(new java.awt.Font("宋体", Font.BOLD, 12)); 97 lbl_name.setText("姓名:"); 98 lbl_name.setBounds(new Rectangle(46, 205, 42, 15)); 99 lbl_age.setFont(new java.awt.Font("宋体", Font.BOLD, 12)); 100 lbl_age.setText("年龄:"); 101 lbl_age.setBounds(new Rectangle(200, 205, 42, 15)); 102 lbl_address.setFont(new java.awt.Font("宋体", Font.BOLD, 12)); 103 lbl_address.setText("地址:"); 104 lbl_address.setBounds(new Rectangle(46, 232, 42, 15)); 105 txt_name.setFont(new java.awt.Font("宋体", Font.BOLD, 12)); 106 txt_name.setBounds(new Rectangle(98, 205, 72, 21)); 107 txt_age.setFont(new java.awt.Font("宋体", Font.BOLD, 12)); 108 txt_age.setBounds(new Rectangle(250, 205, 72, 21)); 109 txt_address.setFont(new java.awt.Font("宋体", Font.BOLD, 12)); 110 txt_address.setBounds(new Rectangle(98, 232, 72, 21)); 111 btn_add.setBounds(new Rectangle(46, 271, 83, 25)); 112 btn_add.setFont(new java.awt.Font("宋体", Font.BOLD, 12)); 113 btn_add.setText("添 加"); 114 btn_add.addActionListener(new JTableAppFrame_btn_add_actionAdapter(this)); 115 btn_del.setBounds(new Rectangle(155, 271, 83, 25)); 116 btn_del.setFont(new java.awt.Font("宋体", Font.BOLD, 12)); 117 btn_del.setText("删 除"); 118 btn_del.addActionListener(new JTableAppFrame_btn_del_actionAdapter(this)); 119 btn_update.setBounds(new Rectangle(260, 271, 83, 25)); 120 btn_update.setFont(new java.awt.Font("宋体", Font.BOLD, 12)); 121 btn_update.setText("修 改"); 122 btn_update.addActionListener(new 123 JTableAppFrame_btn_update_actionAdapter(this)); 124 btn_reset.setBounds(new Rectangle(258, 232, 83, 25)); 125 btn_reset.setFont(new java.awt.Font("宋体", Font.BOLD, 12)); 126 btn_reset.setText("重 置"); 127 btn_reset.addActionListener(new JTableAppFrame_btn_reset_actionAdapter(this)); 128 contentPane.add(scp); 129 contentPane.add(lbl_name); 130 contentPane.add(lbl_age); 131 contentPane.add(lbl_address); 132 contentPane.add(txt_name); 133 contentPane.add(txt_age); 134 contentPane.add(txt_address); 135 contentPane.add(btn_del); 136 contentPane.add(btn_update); 137 contentPane.add(btn_add); 138 contentPane.add(btn_reset); 139 dbcon.connectDB(); 140 this.showTable(); 141 tab = new JTable(CellsVector, TitleVector); 142 scp.getViewport().add(tab); 143 } 144 145 public void showTable() { 146 this.TitleVector.add("姓名"); 147 this.TitleVector.add("年龄"); 148 this.TitleVector.add("地址"); 149 dbcon.select(); 150 ArrayList list = dbcon.select(); 151 for (int i = 0; i < list.size(); i++) { 152 Student stu = (Student) list.get(i); 153 Vector v = new Vector(); 154 v.add(stu.getName()); 155 v.add(stu.getAge()); 156 v.add(stu.getAddress()); 157 CellsVector.add(v); 158 } 159 } 160 161 162 String name; 163 String age; 164 String address; 165 public int checkInformation() { 166 name = this.txt_name.getText(); 167 age = this.txt_age.getText(); 168 address = this.txt_address.getText(); 169 if (name.equals("")) { 170 JOptionPane.showMessageDialog(this, "您好!请输入姓名!", "提示", 1); 171 this.txt_name.grabFocus(); 172 return 0; 173 } 174 if (age.equals("")) { 175 JOptionPane.showMessageDialog(this, "您好!请输入年龄!", "提示", 1); 176 this.txt_age.grabFocus(); 177 return 0; 178 } 179 char[] ans = age.toCharArray(); 180 for (int i = 0; i < ans.length; i++) { 181 if (!Character.isDigit(ans[i])) { 182 JOptionPane.showMessageDialog(this, "您好!年龄输入错误!", "提示", 1); 183 this.txt_age.setText(""); 184 this.txt_age.grabFocus(); 185 return 0; 186 } 187 } 188 if (age.length() > 3) { 189 JOptionPane.showMessageDialog(this, "您好!年龄最高只能为 100 岁!", "提示", 1); 190 this.txt_age.setText(""); 191 this.txt_age.grabFocus(); 192 return 0; 193 } 194 if (address.equals("")) { 195 JOptionPane.showMessageDialog(this, "您好!请输入地址!", "提示", 1); 196 this.txt_address.grabFocus(); 197 return 0; 198 } 199 ages = Integer.valueOf(age); 200 return 1; 201 } 202 203 int ages; 204 public void btn_add_actionPerformed(ActionEvent e) { 205 if (this.checkInformation() == 0) { 206 return; 207 } 208 dbcon.insert(name, ages, address); 209 this.CellsVector.clear(); 210 this.showTable(); 211 this.tab.updateUI(); 212 this.btn_reset_actionPerformed(e); 213 } 214 215 ResultSet rs; 216 public void btn_del_actionPerformed(ActionEvent e) { 217 String name = this.txt_name.getText(); 218 this.txt_age.setEditable(false); 219 this.txt_address.setEditable(false); 220 if (name.equals("")) { 221 JOptionPane.showMessageDialog(this, "您好!请输入姓名!", "提示", 1); 222 this.txt_name.grabFocus(); 223 return; 224 } 225 try { 226 String sql = "select * from Student where name=?"; 227 PreparedStatement ps = DBCon.con.prepareStatement(sql); 228 ps.setString(1, name); 229 rs = ps.executeQuery(); 230 if (rs.next()) { 231 ps.close(); 232 dbcon.delete(name); 233 this.CellsVector.clear(); 234 this.showTable(); 235 this.tab.updateUI(); 236 this.btn_reset_actionPerformed(e); 237 } else { 238 JOptionPane.showMessageDialog(this, "您好!该学员不存在!", "提示", 1); 239 this.btn_reset_actionPerformed(e); 240 return; 241 } 242 } catch (SQLException ex) { 243 System.out.println("核对学员信息发生异常" + ex.getMessage()); 244 } 245 } 246 247 public void btn_update_actionPerformed(ActionEvent e) { 248 if (this.checkInformation() == 0) { 249 return; 250 } 251 try { 252 String sql = "select * from Student where name=?"; 253 PreparedStatement ps = DBCon.con.prepareStatement(sql); 254 ps.setString(1, name); 255 rs = ps.executeQuery(); 256 if (rs.next()) { 257 ps.close(); 258 dbcon.update(name, ages, address); 259 this.CellsVector.clear(); 260 this.showTable(); 261 this.tab.updateUI(); 262 this.btn_reset_actionPerformed(e); 263 } else { 264 JOptionPane.showMessageDialog(this, "您好!该学员不存在!", "提示", 1); 265 this.btn_reset_actionPerformed(e); 266 return; 267 } 268 } catch (SQLException ex) { 269 System.out.println("核对学员信息发生异常" + ex.getMessage()); 270 } 271 } 272 273 public void btn_reset_actionPerformed(ActionEvent e) { 274 this.txt_name.setText(""); 275 this.txt_age.setText(""); 276 this.txt_address.setText(""); 277 this.txt_age.setEditable(true); 278 this.txt_address.setEditable(true); 279 } 280 } 281 282 class JTableAppFrame_btn_del_actionAdapter implements ActionListener { 283 private JTableAppFrame adaptee; 284 JTableAppFrame_btn_del_actionAdapter(JTableAppFrame adaptee) { 285 this.adaptee = adaptee; 286 } 287 public void actionPerformed(ActionEvent e) { 288 adaptee.btn_del_actionPerformed(e); 289 } 290 } 291 292 class JTableAppFrame_btn_update_actionAdapter implements ActionListener { 293 private JTableAppFrame adaptee; 294 JTableAppFrame_btn_update_actionAdapter(JTableAppFrame adaptee) { 295 this.adaptee = adaptee; 296 } 297 public void actionPerformed(ActionEvent e) { 298 adaptee.btn_update_actionPerformed(e); 299 } 300 } 301 302 class JTableAppFrame_btn_reset_actionAdapter implements ActionListener { 303 private JTableAppFrame adaptee; 304 JTableAppFrame_btn_reset_actionAdapter(JTableAppFrame adaptee) { 305 this.adaptee = adaptee; 306 } 307 public void actionPerformed(ActionEvent e) { 308 adaptee.btn_reset_actionPerformed(e); 309 } 310 } 311 312 class JTableAppFrame_btn_add_actionAdapter implements ActionListener { 313 private JTableAppFrame adaptee; 314 JTableAppFrame_btn_add_actionAdapter(JTableAppFrame adaptee) { 315 this.adaptee = adaptee; 316 } 317 public void actionPerformed(ActionEvent e) { 318 adaptee.btn_add_actionPerformed(e); 319 } 320 } 321 连接数据库类:DBCon.java 322 package jtabletest; 323 import java.sql.*; 324 import java.util.ArrayList; 325 import javax.swing.JOptionPane; 326 public class DBCon { 327 static Connection con; 328 private final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver"; 329 private final String URL = "jdbc:odbc:test"; 330 ResultSet rs = null; 331 Statement st = null; 332 public DBCon() { 333 } 334 335 public void connectDB() { 336 try { 337 Class.forName(DRIVER); 338 } catch (ClassNotFoundException ex) { 339 System.out.println(ex.getMessage()); 340 } 341 if (con == null) { 342 try { 343 con = DriverManager.getConnection(URL); 344 } catch (SQLException ex) { 345 System.out.println("创建连接发生异常:" + ex.getMessage()); 346 System.exit(0); 347 } 348 } 349 } 350 351 public ArrayList select() { 352 ArrayList list = new ArrayList(); 353 String sql = "select * from Student"; 354 try { 355 st = con.createStatement(); 356 rs = st.executeQuery(sql); 357 while (rs.next()) { 358 Student stu = new Student(); 359 stu.setName(rs.getString(2)); 360 stu.setAge(rs.getInt(3)); 361 stu.setAddress(rs.getString(4)); 362 list.add(stu); 363 } 364 } catch (SQLException ex) { 365 System.out.println("查询数据发生异常:" + ex.getMessage()); 366 } finally { 367 try { 368 rs.close(); 369 } catch (SQLException ex1) { 370 System.out.println("查询数据关闭语句异常:" + ex1.getMessage()); 371 } 372 } 373 return list; 374 } 375 376 public void insert(String name, int age, String address) { 377 String sql = "insert into Student values(?,?,?)"; 378 PreparedStatement ps = null; 379 try { 380 ps = con.prepareStatement(sql); 381 ps.setString(1, name); 382 ps.setInt(2, age); 383 ps.setString(3, address); 384 if (ps.executeUpdate() != 0) { 385 JOptionPane.showMessageDialog(null, "恭喜!插入数据成功!", "消息", 1); 386 } 387 } catch (SQLException ex) { 388 System.out.println("插入数据发生异常:" + ex.getMessage()); 389 } finally { 390 try { 391 ps.close(); 392 } catch (SQLException ex1) { 393 System.out.println("插入数据关闭语句异常:" + ex1.getMessage()); 394 } 395 } 396 } 397 398 public void update(String name, int age, String address) { 399 String sql = "update Student set age = ?,address = ? where name =?"; 400 PreparedStatement ps = null; 401 try { 402 ps = con.prepareStatement(sql); 403 ps.setInt(1, age); 404 ps.setString(2, address); 405 ps.setString(3, name); 406 if (ps.executeUpdate() != 0) { 407 JOptionPane.showMessageDialog(null, "恭喜!更新数据成功!", "消息", 1); 408 } 409 } catch (SQLException ex) { 410 System.out.println("修改数据发生异常!"); 411 } finally { 412 try { 413 ps.close(); 414 } catch (SQLException ex1) { 415 System.out.println("修改数据关闭语句异常:" + ex1.getMessage()); 416 } 417 } 418 } 419 420 public void delete(String name) { 421 String sql = "delete from Student where name =?"; 422 PreparedStatement ps = null; 423 int delNumber; 424 try { 425 ps = con.prepareStatement(sql); 426 ps.setString(1, name); 427 delNumber = ps.executeUpdate(); 428 if (delNumber != 0) { 429 JOptionPane.showMessageDialog(null, "恭喜!删除数据成功!", "消息", 1); 430 } 431 } catch (SQLException ex) { 432 System.out.println("删除数据发生异常:" + ex.getMessage()); 433 } finally { 434 try { 435 ps.close(); 436 } catch (SQLException ex1) { 437 System.out.println("删除数据关闭语句异常:" + ex1.getMessage()); 438 } 439 } 440 } 441 442 public void destoryConnection() { 443 if (con != null) { 444 try { 445 con.close(); 446 } catch (SQLException ex) { 447 System.out.println("释放连接异常:" + ex.getMessage()); 448 } 449 } 450 } 451 } 452 JavaBean 类:Student.java 453 package jtabletest; 454 public class Student { 455 private String name; 456 private int age; 457 private String address; 458 public Student() { 459 } 460 public void setName(String name) { 461 this.name = name; 462 } 463 public void setAge(int age) { 464 this.age = age; 465 } 466 public void setAddress(String address) { 467 this.address = address; 468 } 469 public String getName() { 470 return name; 471 } 472 public int getAge() { 473 return age; 474 } 475 public String getAddress() { 476 return address; 477 } 478 }