how2j.cn

步骤 1 : 练习-增加   
步骤 2 : 答案-增加   
步骤 3 : 练习-删除   
步骤 4 : 答案-删除   
步骤 5 : 练习-编辑   
步骤 6 : 答案-编辑   
步骤 7 : 练习-修改   
步骤 8 : 答案-修改   
步骤 9 : 练习-使用按钮分页   
步骤 10 : 答案-使用按钮分页   
步骤 11 : 练习-使用下拉框分页   
步骤 12 : 答案-使用下拉框分页   

步骤 1 :

练习-增加

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
点击增加按钮,出现一个JDialog,在JDialog中进行增加
练习-增加
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

6分27秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


1. 首先把 htm和 table设计为静态,后面在更新表格数据的时候,就很容易访问这个两个对象
2. 设计一个静态内部类 AddDialog用于显示增加的界面
3. 在AddDialog中点击提交按钮后,进行为空和数字判断,然后通过dao提交到数据库
4. 隐藏这个AddDialog,并刷新table中的数据
package gui; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import charactor.Hero; import jdbc.HeroDAO; public class TestGUI { //把 htm和 table设计为静态,后面在更新表格数据的时候,就很容易访问这个两个对象 static HeroTableModel htm = new HeroTableModel(); static JTable t = new JTable(htm); public static void main(String[] args) { final JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(new BorderLayout()); t.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); t.getSelectionModel().setSelectionInterval(0, 0); JPanel pOperation = new JPanel(); JButton bAdd = new JButton("增加"); pOperation.add(bAdd); bAdd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new AddDialog(f).setVisible(true); } }); JScrollPane sp = new JScrollPane(t); f.add(sp, BorderLayout.CENTER); f.add(pOperation, BorderLayout.SOUTH); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } static class AddDialog extends JDialog{ JLabel lName = new JLabel("名称"); JLabel lHp = new JLabel("血量"); JTextField tfName =new JTextField(); JTextField tfHp =new JTextField(); JButton bSubmit =new JButton("提交"); AddDialog(JFrame f){ super(f); this.setModal(true); int gap = 50; this.setLayout(null); JPanel pInput= new JPanel(); JPanel pSubmit= new JPanel(); pInput.setLayout(new GridLayout(2, 2,gap,gap)); pInput.add(lName); pInput.add(tfName); pInput.add(lHp); pInput.add(tfHp); pSubmit.add(bSubmit); pInput.setBounds(50,20,200,100); pSubmit.setBounds(0,130,300,150); this.add(pInput); this.add(pSubmit); this.setSize(300, 200); this.setLocationRelativeTo(f); bSubmit.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { if(checkEmpty(tfName, "名称")){ if(checkNumber(tfHp, "hp")){ String name = tfName.getText(); int hp = Integer.parseInt(tfHp.getText()); Hero h = new Hero(); h.name = name; h.hp = hp; new HeroDAO().add(h); JOptionPane.showMessageDialog(f, "提交成功 "); AddDialog.this.setVisible(false); updateTable(); } } } }); } } public static void updateTable(){ htm.heros = new HeroDAO().list(); t.updateUI(); if(!htm.heros.isEmpty()) t.getSelectionModel().setSelectionInterval(0, 0); } private static boolean checkEmpty(JTextField tf, String msg) { String value = tf.getText(); if(0==value.length()){ JOptionPane.showMessageDialog(null,msg + " 不能为空"); tf.grabFocus(); return false; } return true; } private static boolean checkNumber(JTextField tf, String msg) { String value = tf.getText(); if(0==value.length()){ JOptionPane.showMessageDialog(null,msg + " 不能为空"); tf.grabFocus(); return false; } try { Integer.parseInt(value); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(null,msg + " 只能是整数"); tf.grabFocus(); return false; } return true; } }
步骤 3 :

练习-删除

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
提供一个删除按钮,点击删除按钮之后,删除选中的行,并且刷新table中的数据,然后再默认选中第一行。

如果点击删除的时候,没有任何行被选中,则提示“删除前应该选中一行”
练习-删除
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

5分13秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package gui; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import charactor.Hero; import jdbc.HeroDAO; public class TestGUI { //把 htm和 table设计为静态,后面在更新表格数据的时候,就很容易访问这个两个对象 static HeroTableModel htm = new HeroTableModel(); static JTable t = new JTable(htm); public static void main(String[] args) { final JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(new BorderLayout()); t.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); t.getSelectionModel().setSelectionInterval(0, 0); JPanel pOperation = new JPanel(); JButton bAdd = new JButton("增加"); JButton bDelete = new JButton("删除"); pOperation.add(bAdd); pOperation.add(bDelete); bAdd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new AddDialog(f).setVisible(true); } }); bDelete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //判断是否选中 int index = t.getSelectedRow(); if(-1==index){ JOptionPane.showMessageDialog(f, "删除前需要先选中一行"); return; } //进行确认是否要删除 if(JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(f, "确认要删除?")) return; //获取id Hero hero = htm.heros.get(index); int id =hero.id; //删除 new HeroDAO().delete(id); //更新table updateTable(); } }); JScrollPane sp = new JScrollPane(t); f.add(sp, BorderLayout.CENTER); f.add(pOperation, BorderLayout.SOUTH); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } static class AddDialog extends JDialog{ JLabel lName = new JLabel("名称"); JLabel lHp = new JLabel("血量"); JTextField tfName =new JTextField(); JTextField tfHp =new JTextField(); JButton bSubmit =new JButton("提交"); AddDialog(JFrame f){ super(f); this.setModal(true); int gap = 50; this.setLayout(null); JPanel pInput= new JPanel(); JPanel pSubmit= new JPanel(); pInput.setLayout(new GridLayout(2, 2,gap,gap)); pInput.add(lName); pInput.add(tfName); pInput.add(lHp); pInput.add(tfHp); pSubmit.add(bSubmit); pInput.setBounds(50,20,200,100); pSubmit.setBounds(0,130,300,150); this.add(pInput); this.add(pSubmit); this.setSize(300, 200); this.setLocationRelativeTo(f); bSubmit.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { if(checkEmpty(tfName, "名称")){ if(checkNumber(tfHp, "hp")){ String name = tfName.getText(); int hp = Integer.parseInt(tfHp.getText()); Hero h = new Hero(); h.name = name; h.hp = hp; new HeroDAO().add(h); JOptionPane.showMessageDialog(f, "提交成功 "); AddDialog.this.setVisible(false); updateTable(); } } } }); } } public static void updateTable(){ htm.heros = new HeroDAO().list(); t.updateUI(); if(!htm.heros.isEmpty()) t.getSelectionModel().setSelectionInterval(0, 0); } private static boolean checkEmpty(JTextField tf, String msg) { String value = tf.getText(); if(0==value.length()){ JOptionPane.showMessageDialog(null,msg + " 不能为空"); tf.grabFocus(); return false; } return true; } private static boolean checkNumber(JTextField tf, String msg) { String value = tf.getText(); if(0==value.length()){ JOptionPane.showMessageDialog(null,msg + " 不能为空"); tf.grabFocus(); return false; } try { Integer.parseInt(value); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(null,msg + " 只能是整数"); tf.grabFocus(); return false; } return true; } }
步骤 5 :

练习-编辑

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
提供一个编辑按钮,点击的时候,弹出一个JDialog,显示选中的数据,并且能够修改。

如果点击的时候,没有选中任意一行,则提示 "编辑前请选中一行数据"
练习-编辑
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

4分23秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package gui; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import charactor.Hero; import jdbc.HeroDAO; public class TestGUI { // 把 htm和 table设计为静态,后面在更新表格数据的时候,就很容易访问这个两个对象 static HeroTableModel htm = new HeroTableModel(); static JTable t = new JTable(htm); public static void main(String[] args) { final JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(new BorderLayout()); t.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); t.getSelectionModel().setSelectionInterval(0, 0); JPanel pOperation = new JPanel(); JButton bAdd = new JButton("增加"); JButton bDelete = new JButton("删除"); JButton bEdit = new JButton("编辑"); pOperation.add(bAdd); pOperation.add(bDelete); pOperation.add(bEdit); bEdit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 判断是否选中 int index = t.getSelectedRow(); if (-1 == index) { JOptionPane.showMessageDialog(f, "编辑前需要先选中一行"); return; } // 获取选中的对象 Hero hero = htm.heros.get(index); // 显示编辑Dialog EditDialog ed = new EditDialog(f); ed.tfName.setText(hero.name); ed.tfHp.setText(String.valueOf((int) hero.hp)); ed.setVisible(true); } }); bAdd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new AddDialog(f).setVisible(true); } }); bDelete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 判断是否选中 int index = t.getSelectedRow(); if (-1 == index) { JOptionPane.showMessageDialog(f, "删除前需要先选中一行"); return; } // 进行确认是否要删除 if (JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(f, "确认要删除?")) return; // 获取id Hero hero = htm.heros.get(index); int id = hero.id; // 删除 new HeroDAO().delete(id); // 更新table updateTable(); } }); JScrollPane sp = new JScrollPane(t); f.add(sp, BorderLayout.CENTER); f.add(pOperation, BorderLayout.SOUTH); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } static class AddDialog extends JDialog { JLabel lName = new JLabel("名称"); JLabel lHp = new JLabel("血量"); JTextField tfName = new JTextField(); JTextField tfHp = new JTextField(); JButton bSubmit = new JButton("提交"); AddDialog(JFrame f) { super(f); this.setModal(true); int gap = 50; this.setLayout(null); JPanel pInput = new JPanel(); JPanel pSubmit = new JPanel(); pInput.setLayout(new GridLayout(2, 2, gap, gap)); pInput.add(lName); pInput.add(tfName); pInput.add(lHp); pInput.add(tfHp); pSubmit.add(bSubmit); pInput.setBounds(50, 20, 200, 100); pSubmit.setBounds(0, 130, 300, 150); this.add(pInput); this.add(pSubmit); this.setSize(300, 200); this.setLocationRelativeTo(f); bSubmit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (checkEmpty(tfName, "名称")) { if (checkNumber(tfHp, "hp")) { String name = tfName.getText(); int hp = Integer.parseInt(tfHp.getText()); Hero h = new Hero(); h.name = name; h.hp = hp; new HeroDAO().add(h); JOptionPane.showMessageDialog(f, "提交成功 "); AddDialog.this.setVisible(false); updateTable(); } } } }); } } public static void updateTable() { htm.heros = new HeroDAO().list(); t.updateUI(); if (!htm.heros.isEmpty()) t.getSelectionModel().setSelectionInterval(0, 0); } private static boolean checkEmpty(JTextField tf, String msg) { String value = tf.getText(); if (0 == value.length()) { JOptionPane.showMessageDialog(null, msg + " 不能为空"); tf.grabFocus(); return false; } return true; } private static boolean checkNumber(JTextField tf, String msg) { String value = tf.getText(); if (0 == value.length()) { JOptionPane.showMessageDialog(null, msg + " 不能为空"); tf.grabFocus(); return false; } try { Integer.parseInt(value); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(null, msg + " 只能是整数"); tf.grabFocus(); return false; } return true; } static class EditDialog extends JDialog { JLabel lName = new JLabel("名称"); JLabel lHp = new JLabel("血量"); JTextField tfName = new JTextField(); JTextField tfHp = new JTextField(); JButton bSubmit = new JButton("提交"); EditDialog(JFrame f) { super(f); this.setModal(true); int gap = 50; this.setLayout(null); JPanel pInput = new JPanel(); JPanel pSubmit = new JPanel(); pInput.setLayout(new GridLayout(2, 2, gap, gap)); pInput.add(lName); pInput.add(tfName); pInput.add(lHp); pInput.add(tfHp); pSubmit.add(bSubmit); pInput.setBounds(50, 20, 200, 100); pSubmit.setBounds(0, 130, 300, 150); this.add(pInput); this.add(pSubmit); this.setSize(300, 200); this.setLocationRelativeTo(f); } } }
步骤 7 :

练习-修改

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
接着练习-编辑继续完整修改的功能。 点击修改,首选判断数据是否正确,是否为空,是否为数字等。 通过校验后,把数据保存到数据库,然后刷新table中的数据,并且选中第一条。
练习-修改
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费3个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

4分5秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package gui; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import charactor.Hero; import jdbc.HeroDAO; public class TestGUI { // 把 htm和 table设计为静态,后面在更新表格数据的时候,就很容易访问这个两个对象 static HeroTableModel htm = new HeroTableModel(); static JTable t = new JTable(htm); public static void main(String[] args) { final JFrame f = new JFrame("LoL"); f.setSize(400, 300); f.setLocation(200, 200); f.setLayout(new BorderLayout()); t.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); t.getSelectionModel().setSelectionInterval(0, 0); JPanel pOperation = new JPanel(); JButton bAdd = new JButton("增加"); JButton bDelete = new JButton("删除"); JButton bEdit = new JButton("编辑"); pOperation.add(bAdd); pOperation.add(bDelete); pOperation.add(bEdit); bEdit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 判断是否选中 int index = t.getSelectedRow(); if (-1 == index) { JOptionPane.showMessageDialog(f, "编辑前需要先选中一行"); return; } // 获取选中的对象 Hero hero = htm.heros.get(index); // 显示编辑Dialog EditDialog ed = new EditDialog(f); ed.tfName.setText(hero.name); ed.tfHp.setText(String.valueOf((int) hero.hp)); ed.setVisible(true); } }); bAdd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new AddDialog(f).setVisible(true); } }); bDelete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 判断是否选中 int index = t.getSelectedRow(); if (-1 == index) { JOptionPane.showMessageDialog(f, "删除前需要先选中一行"); return; } // 进行确认是否要删除 if (JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(f, "确认要删除?")) return; // 获取id Hero hero = htm.heros.get(index); int id = hero.id; // 删除 new HeroDAO().delete(id); // 更新table updateTable(); } }); JScrollPane sp = new JScrollPane(t); f.add(sp, BorderLayout.CENTER); f.add(pOperation, BorderLayout.SOUTH); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } static class AddDialog extends JDialog { JLabel lName = new JLabel("名称"); JLabel lHp = new JLabel("血量"); JTextField tfName = new JTextField(); JTextField tfHp = new JTextField(); JButton bSubmit = new JButton("提交"); AddDialog(JFrame f) { super(f); this.setModal(true); int gap = 50; this.setLayout(null); JPanel pInput = new JPanel(); JPanel pSubmit = new JPanel(); pInput.setLayout(new GridLayout(2, 2, gap, gap)); pInput.add(lName); pInput.add(tfName); pInput.add(lHp); pInput.add(tfHp); pSubmit.add(bSubmit); pInput.setBounds(50, 20, 200, 100); pSubmit.setBounds(0, 130, 300, 150); this.add(pInput); this.add(pSubmit); this.setSize(300, 200); this.setLocationRelativeTo(f); bSubmit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (checkEmpty(tfName, "名称")) { if (checkNumber(tfHp, "hp")) { String name = tfName.getText(); int hp = Integer.parseInt(tfHp.getText()); Hero h = new Hero(); h.name = name; h.hp = hp; new HeroDAO().add(h); JOptionPane.showMessageDialog(f, "提交成功 "); AddDialog.this.setVisible(false); updateTable(); } } } }); } } public static void updateTable() { htm.heros = new HeroDAO().list(); t.updateUI(); if (!htm.heros.isEmpty()) t.getSelectionModel().setSelectionInterval(0, 0); } private static boolean checkEmpty(JTextField tf, String msg) { String value = tf.getText(); if (0 == value.length()) { JOptionPane.showMessageDialog(null, msg + " 不能为空"); tf.grabFocus(); return false; } return true; } private static boolean checkNumber(JTextField tf, String msg) { String value = tf.getText(); if (0 == value.length()) { JOptionPane.showMessageDialog(null, msg + " 不能为空"); tf.grabFocus(); return false; } try { Integer.parseInt(value); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(null, msg + " 只能是整数"); tf.grabFocus(); return false; } return true; } static class EditDialog extends JDialog { JLabel lName = new JLabel("名称"); JLabel lHp = new JLabel("血量"); JTextField tfName = new JTextField(); JTextField tfHp = new JTextField(); JButton bSubmit = new JButton("提交"); EditDialog(JFrame f) { super(f); this.setModal(true); int gap = 50; this.setLayout(null); JPanel pInput = new JPanel(); JPanel pSubmit = new JPanel(); pInput.setLayout(new GridLayout(2, 2, gap, gap)); pInput.add(lName); pInput.add(tfName); pInput.add(lHp); pInput.add(tfHp); pSubmit.add(bSubmit); pInput.setBounds(50, 20, 200, 100); pSubmit.setBounds(0, 130, 300, 150); this.add(pInput); this.add(pSubmit); this.setSize(300, 200); this.setLocationRelativeTo(f); bSubmit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (checkEmpty(tfName, "名称")) { if (checkNumber(tfHp, "hp")) { //获取id int index = t.getSelectedRow(); int id = htm.heros.get(index).id; String name = tfName.getText(); int hp = Integer.parseInt(tfHp.getText()); Hero h = new Hero(); h.name = name; h.hp = hp; h.id= id; new HeroDAO().update(h); JOptionPane.showMessageDialog(f, "提交成功 "); EditDialog.this.setVisible(false); updateTable(); } } } }); } } }
步骤 9 :

练习-使用按钮分页

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
在table中仅仅显示10条数据。
在下方出现4个按钮
首页 上一页 下一页 末页

最后一页
最后一页需要注意,如果数据库中的总数能够整除10,那么最后一页就显示10个,否则就显示不到除以10的余数。 比如一共是25个,那么最后一页就显示5个。

按钮的状态要求:
如果有下一页的数据,才能点击下一页,否则下一页按钮是不可用的。
通过如下代码设置代码不可用

JButton.setEnable(false)

对首页,上一页和末页也是一样。
练习-使用按钮分页
步骤 10 :

答案-使用按钮分页

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

17分23秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package gui; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import charactor.Hero; import jdbc.HeroDAO; public class TestGUI { static HeroTableModel htm = new HeroTableModel(); static JTable t = new JTable(htm); // 把分页按钮放在这里,后面监听器好访问 static JButton bFirst = new JButton("首页"); static JButton bPre = new JButton("上一页"); static JButton bNext = new JButton("下一页"); static JButton bLast = new JButton("末页"); static int number = 10;// 每页显示10个 static int start = 0;// 开始的页码 public static void main(String[] args) { final JFrame f = new JFrame("LoL"); f.setSize(400, 340); f.setLocation(200, 200); t.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); t.getSelectionModel().setSelectionInterval(0, 0); JPanel pOperation = new JPanel(); JButton bAdd = new JButton("增加"); JButton bDelete = new JButton("删除"); JButton bEdit = new JButton("编辑"); pOperation.add(bAdd); pOperation.add(bDelete); pOperation.add(bEdit); JPanel pPage = new JPanel(); pPage.add(bFirst); pPage.add(bPre); pPage.add(bNext); pPage.add(bLast); bEdit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 判断是否选中 int index = t.getSelectedRow(); if (-1 == index) { JOptionPane.showMessageDialog(f, "编辑前需要先选中一行"); return; } // 获取选中的对象 Hero hero = htm.heros.get(index); // 显示编辑Dialog EditDialog ed = new EditDialog(f); ed.tfName.setText(hero.name); ed.tfHp.setText(String.valueOf((int) hero.hp)); ed.setVisible(true); } }); bAdd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new AddDialog(f).setVisible(true); updateButtonStatus(); } }); bDelete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 判断是否选中 int index = t.getSelectedRow(); if (-1 == index) { JOptionPane.showMessageDialog(f, "删除前需要先选中一行"); return; } // 进行确认是否要删除 if (JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(f, "确认要删除?")) return; // 获取id Hero hero = htm.heros.get(index); int id = hero.id; // 删除 new HeroDAO().delete(id); start = 0; // 更新table updateTable(); updateButtonStatus(); } }); addPageListener(); JScrollPane sp = new JScrollPane(t); f.setLayout(null); sp.setBounds(0, 0, 394, 200); pOperation.setBounds(0, 200, 394, 50); pPage.setBounds(0, 250, 394, 200); f.add(sp); f.add(pOperation); f.add(pPage); updateButtonStatus(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } private static void addPageListener() { bFirst.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { start = 0; updateTable(); updateButtonStatus(); } }); bPre.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { start -= number; updateTable(); updateButtonStatus(); } }); bNext.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { start += number; updateTable(); updateButtonStatus(); } }); bLast.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { start = last(); updateTable(); updateButtonStatus(); } }); } private static void updateButtonStatus() { int last = last(); // 是否有上一页 if (0 != start) { bFirst.setEnabled(true); bPre.setEnabled(true); } // 是否是第一页 if (0 == start) { bFirst.setEnabled(false); bPre.setEnabled(false); } // 是否是最后一页 if (start == last) { bLast.setEnabled(false); bNext.setEnabled(false); } // 是否有下一页 if (start < last) { bLast.setEnabled(true); bNext.setEnabled(true); } } static class AddDialog extends JDialog { JLabel lName = new JLabel("名称"); JLabel lHp = new JLabel("血量"); JTextField tfName = new JTextField(); JTextField tfHp = new JTextField(); JButton bSubmit = new JButton("提交"); AddDialog(JFrame f) { super(f); this.setModal(true); int gap = 50; this.setLayout(null); JPanel pInput = new JPanel(); JPanel pSubmit = new JPanel(); pInput.setLayout(new GridLayout(2, 2, gap, gap)); pInput.add(lName); pInput.add(tfName); pInput.add(lHp); pInput.add(tfHp); pSubmit.add(bSubmit); pInput.setBounds(50, 20, 200, 100); pSubmit.setBounds(0, 130, 300, 150); this.add(pInput); this.add(pSubmit); this.setSize(300, 200); this.setLocationRelativeTo(f); bSubmit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (checkEmpty(tfName, "名称")) { if (checkNumber(tfHp, "hp")) { String name = tfName.getText(); int hp = Integer.parseInt(tfHp.getText()); Hero h = new Hero(); h.name = name; h.hp = hp; new HeroDAO().add(h); JOptionPane.showMessageDialog(f, "提交成功 "); AddDialog.this.setVisible(false); start = 0; updateTable(); } } } }); } } public static void updateTable() { htm.heros = new HeroDAO().list(start, number); t.updateUI(); if (!htm.heros.isEmpty()) t.getSelectionModel().setSelectionInterval(0, 0); } private static boolean checkEmpty(JTextField tf, String msg) { String value = tf.getText(); if (0 == value.length()) { JOptionPane.showMessageDialog(null, msg + " 不能为空"); tf.grabFocus(); return false; } return true; } private static boolean checkNumber(JTextField tf, String msg) { String value = tf.getText(); if (0 == value.length()) { JOptionPane.showMessageDialog(null, msg + " 不能为空"); tf.grabFocus(); return false; } try { Integer.parseInt(value); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(null, msg + " 只能是整数"); tf.grabFocus(); return false; } return true; } static class EditDialog extends JDialog { JLabel lName = new JLabel("名称"); JLabel lHp = new JLabel("血量"); JTextField tfName = new JTextField(); JTextField tfHp = new JTextField(); JButton bSubmit = new JButton("提交"); EditDialog(JFrame f) { super(f); this.setModal(true); int gap = 50; this.setLayout(null); JPanel pInput = new JPanel(); JPanel pSubmit = new JPanel(); pInput.setLayout(new GridLayout(2, 2, gap, gap)); pInput.add(lName); pInput.add(tfName); pInput.add(lHp); pInput.add(tfHp); pSubmit.add(bSubmit); pInput.setBounds(50, 20, 200, 100); pSubmit.setBounds(0, 130, 300, 150); this.add(pInput); this.add(pSubmit); this.setSize(300, 200); this.setLocationRelativeTo(f); bSubmit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (checkEmpty(tfName, "名称")) { if (checkNumber(tfHp, "hp")) { // 获取id int index = t.getSelectedRow(); int id = htm.heros.get(index).id; String name = tfName.getText(); int hp = Integer.parseInt(tfHp.getText()); Hero h = new Hero(); h.name = name; h.hp = hp; h.id = id; new HeroDAO().update(h); JOptionPane.showMessageDialog(f, "提交成功 "); EditDialog.this.setVisible(false); updateTable(); } } } }); } } private static int last() { // 最后一页开始的位置 int last; int total = new HeroDAO().getTotal(); // 最后一页要看总是是否能够整除每页显示的数量number if (0 == total % number) { // 假设总数是20,那么最后一页开始的位置就是10 last = total - number; } else { // 假设总数是21,那么最后一页开始的位置就是20 last = total - total % number; } return last; } }
步骤 11 :

练习-使用下拉框分页

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
借助下拉框实现下拉框分页
练习-使用下拉框分页
步骤 12 :

答案-使用下拉框分页

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

18分14秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


package gui; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.ListSelectionModel; import charactor.Hero; import jdbc.HeroDAO; public class TestGUI { static HeroTableModel htm = new HeroTableModel(); static JTable t = new JTable(htm); // 把分页按钮放在这里,后面监听器好访问 static JButton bFirst = new JButton("首页"); static JButton bPre = new JButton("上一页"); static JButton bNext = new JButton("下一页"); static JButton bLast = new JButton("末页"); static JComboBox<Integer> cb = new JComboBox<>(); static int number = 10;// 每页显示10个 static int start = 0;// 开始的页码 private static boolean cbListenerEnabled = true; public static void main(String[] args) { final JFrame f = new JFrame("LoL"); f.setSize(400, 340); f.setLocation(200, 200); t.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); t.getSelectionModel().setSelectionInterval(0, 0); JPanel pOperation = new JPanel(); JButton bAdd = new JButton("增加"); JButton bDelete = new JButton("删除"); JButton bEdit = new JButton("编辑"); pOperation.add(bAdd); pOperation.add(bDelete); pOperation.add(bEdit); JPanel pPage = new JPanel(); pPage.add(bFirst); pPage.add(bPre); pPage.add(cb); pPage.add(bNext); pPage.add(bLast); bEdit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 判断是否选中 int index = t.getSelectedRow(); if (-1 == index) { JOptionPane.showMessageDialog(f, "编辑前需要先选中一行"); return; } // 获取选中的对象 Hero hero = htm.heros.get(index); // 显示编辑Dialog EditDialog ed = new EditDialog(f); ed.tfName.setText(hero.name); ed.tfHp.setText(String.valueOf((int) hero.hp)); ed.setVisible(true); } }); bAdd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { new AddDialog(f).setVisible(true); updateButtonStatus(); } }); bDelete.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 判断是否选中 int index = t.getSelectedRow(); if (-1 == index) { JOptionPane.showMessageDialog(f, "删除前需要先选中一行"); return; } // 进行确认是否要删除 if (JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(f, "确认要删除?")) return; // 获取id Hero hero = htm.heros.get(index); int id = hero.id; // 删除 new HeroDAO().delete(id); // 更新table start = 0; updateTable(); updateButtonStatus(); } }); addPageListener(); cb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(!cbListenerEnabled) return; int currentPage = (int) cb.getSelectedItem(); start = (currentPage-1)*number; updateTable(); updateButtonStatus(); } }); JScrollPane sp = new JScrollPane(t); f.setLayout(null); sp.setBounds(0, 0, 394, 200); pOperation.setBounds(0, 200, 394, 50); pPage.setBounds(0, 250, 394, 200); f.add(sp); f.add(pOperation); f.add(pPage); updateButtonStatus(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); } private static void addPageListener() { bFirst.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { start = 0; updateTable(); updateButtonStatus(); } }); bPre.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { start -= number; updateTable(); updateButtonStatus(); } }); bNext.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { start += number; updateTable(); updateButtonStatus(); } }); bLast.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { start = last(); updateTable(); updateButtonStatus(); } }); } private static void updateButtonStatus() { int last = last(); // 是否有上一页 if (0 != start) { bFirst.setEnabled(true); bPre.setEnabled(true); } // 是否是第一页 if (0 == start) { bFirst.setEnabled(false); bPre.setEnabled(false); } // 是否是最后一页 if (start == last) { bLast.setEnabled(false); bNext.setEnabled(false); } // 是否有下一页 if (start < last) { bLast.setEnabled(true); bNext.setEnabled(true); } //总共的页数 int pageNumber =last/number+1; cbListenerEnabled = false; cb.removeAllItems(); for (int i = 0; i < pageNumber; i++) { cb.addItem(i+1); } cbListenerEnabled = true; int currentPage = start/number +1; cb.setSelectedItem(currentPage); } static class AddDialog extends JDialog { JLabel lName = new JLabel("名称"); JLabel lHp = new JLabel("血量"); JTextField tfName = new JTextField(); JTextField tfHp = new JTextField(); JButton bSubmit = new JButton("提交"); AddDialog(JFrame f) { super(f); this.setModal(true); int gap = 50; this.setLayout(null); JPanel pInput = new JPanel(); JPanel pSubmit = new JPanel(); pInput.setLayout(new GridLayout(2, 2, gap, gap)); pInput.add(lName); pInput.add(tfName); pInput.add(lHp); pInput.add(tfHp); pSubmit.add(bSubmit); pInput.setBounds(50, 20, 200, 100); pSubmit.setBounds(0, 130, 300, 150); this.add(pInput); this.add(pSubmit); this.setSize(300, 200); this.setLocationRelativeTo(f); bSubmit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (checkEmpty(tfName, "名称")) { if (checkNumber(tfHp, "hp")) { String name = tfName.getText(); int hp = Integer.parseInt(tfHp.getText()); Hero h = new Hero(); h.name = name; h.hp = hp; new HeroDAO().add(h); JOptionPane.showMessageDialog(f, "提交成功 "); AddDialog.this.setVisible(false); start = 0; updateTable(); } } } }); } } public static void updateTable() { htm.heros = new HeroDAO().list(start, number); t.updateUI(); if (!htm.heros.isEmpty()) t.getSelectionModel().setSelectionInterval(0, 0); } private static boolean checkEmpty(JTextField tf, String msg) { String value = tf.getText(); if (0 == value.length()) { JOptionPane.showMessageDialog(null, msg + " 不能为空"); tf.grabFocus(); return false; } return true; } private static boolean checkNumber(JTextField tf, String msg) { String value = tf.getText(); if (0 == value.length()) { JOptionPane.showMessageDialog(null, msg + " 不能为空"); tf.grabFocus(); return false; } try { Integer.parseInt(value); } catch (NumberFormatException e) { JOptionPane.showMessageDialog(null, msg + " 只能是整数"); tf.grabFocus(); return false; } return true; } static class EditDialog extends JDialog { JLabel lName = new JLabel("名称"); JLabel lHp = new JLabel("血量"); JTextField tfName = new JTextField(); JTextField tfHp = new JTextField(); JButton bSubmit = new JButton("提交"); EditDialog(JFrame f) { super(f); this.setModal(true); int gap = 50; this.setLayout(null); JPanel pInput = new JPanel(); JPanel pSubmit = new JPanel(); pInput.setLayout(new GridLayout(2, 2, gap, gap)); pInput.add(lName); pInput.add(tfName); pInput.add(lHp); pInput.add(tfHp); pSubmit.add(bSubmit); pInput.setBounds(50, 20, 200, 100); pSubmit.setBounds(0, 130, 300, 150); this.add(pInput); this.add(pSubmit); this.setSize(300, 200); this.setLocationRelativeTo(f); bSubmit.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (checkEmpty(tfName, "名称")) { if (checkNumber(tfHp, "hp")) { // 获取id int index = t.getSelectedRow(); int id = htm.heros.get(index).id; String name = tfName.getText(); int hp = Integer.parseInt(tfHp.getText()); Hero h = new Hero(); h.name = name; h.hp = hp; h.id = id; new HeroDAO().update(h); JOptionPane.showMessageDialog(f, "提交成功 "); EditDialog.this.setVisible(false); updateTable(); } } } }); } } private static int last() { // 最后一页开始的位置 int last; int total = new HeroDAO().getTotal(); // 最后一页要看总是是否能够整除每页显示的数量number if (0 == total % number) { // 假设总数是20,那么最后一页开始的位置就是10 last = total - number; } else { // 假设总数是21,那么最后一页开始的位置就是20 last = total - total % number; } return last; } }


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2019-05-07 最终作业,我已经很严谨了,但还是求大佬进行优化!!!
帝珈



ORM是对数据库操作的类 HeroTableModel是表格类 没任何提示,在学校宿舍做了一周,这可能是我打过最长的代码了,超多懵逼的地方, 更新,最后一页删除完自动跳到上一页,为啥下拉框监听器运行两遍(老师作业视频有提到),整数数据个数时不加新一页,在模板中进行输入框内容判断等等的问题让我研究了超久, 虽然最后忍不住看了老师视频后才把下拉框监听器整明白,很难受!不过还是搞完了,超鸡儿有成就感!嘿嘿嘿!
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;

public class 分页增删改 {

	public static HeroTableModel h = null;
	public static JTable t = null;
	private static boolean cbListenerEnabled = true;

	public static void zj(JFrame f, JTable t, JComboBox<String> cb) {// 增加

		JDialog d = new JDialog(f);// 模态窗口
		d.setSize(400, 300);
		d.setLocation(300, 300);
		d.setLayout(null);
		d.setModal(true);

		JPanel p = new JPanel();// 面板
		p.setBounds(40, 20, 320, 150);
		p.setLayout(new GridLayout(2, 2, 60, 60));
		JLabel l = new JLabel("名称:");
		JLabel l1 = new JLabel("血量:");
		JTextField t1 = new JTextField();// 输入框
		JTextField t2 = new JTextField();
		JButton b = new JButton("确定");
		b.setBounds(200 - 50, 200, 100, 40);

		b.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				boolean boo = true;
				String mc = t2.getText();
				if (mc.equals("")) {// 名称不能什么都不输入
					JOptionPane.showMessageDialog(f, "名称不能为空");
					boo = false;
				}
				for (int i = 0; i < mc.length(); i++) {// 拆分输入的名称字符串
					if (Character.isWhitespace(mc.charAt(i))) {// 单个字符判断是否是空
						JOptionPane.showMessageDialog(f, "名称不能有空格");
						boo = false;
						break;// 是,结束循环
					}
				}

				String xl = t2.getText();
				if (xl.equals("")) {// 血量不能什么都不输入
					JOptionPane.showMessageDialog(f, "血量不能为空");
					boo = false;
				}
				for (int i = 0; i < xl.length(); i++) {// 拆分输入的血量字符串
					if (Character.isWhitespace(xl.charAt(i))) {// 单个字符判断是否为空
						JOptionPane.showMessageDialog(f, "血量不能有空格");
						boo = false;
						break;// 是,结束循环
					} else if (Character.isLetter(xl.charAt(i))) {// 单个字符判断是否是字母
						JOptionPane.showMessageDialog(f, "血量中不能有字母");
						boo = false;
						break;// 是,结束循环
					}
				}
				if (boo == true) {// 以上判断有问题,以下不运行
					Hero h1 = new Hero();
					h1.name = t1.getText();
					h1.hp = Float.parseFloat(t2.getText());
					h1.damage = 0;
					ORM.add(h1);
					JOptionPane.showMessageDialog(f, "增加完成!");
					h.L = ORM.list(HeroTableModel.one, HeroTableModel.two);// 查数据
					t.updateUI();// 更新数据
					csh(cb);// 更新
				}

			}
		});
		p.add(l);
		p.add(t1);
		p.add(l1);
		p.add(t2);
		d.add(b);
		d.add(p);
		d.setVisible(true);
	}

	public static void sc(JFrame f, JTable t, JComboBox<String> cb) {// 删除

		int a = t.getSelectedRow();// 获取选中哪一行
		Hero he = h.L.get(a);// 取出那一行集合
		int i = JOptionPane.showConfirmDialog(f, "您确定要删除“" + he.name + "”这条数据");
		if (JOptionPane.OK_OPTION == i) {
			ORM.delete(he);
			JOptionPane.showMessageDialog(f, "已删除“" + he.name + "”这条数据");
		} else if (JOptionPane.NO_OPTION == i) {
			JOptionPane.showMessageDialog(f, "取消删除“" + he.name + "”这条数据");
		}
		h.L = ORM.list(HeroTableModel.one, HeroTableModel.two);// 查数据
		t.updateUI();// 更新数据
		int length = ORM.list().size();
		if (length % 10 == 0) {
			String ys = String.valueOf(HeroTableModel.one / 10);// 如果在最后一页删除,删除到最后一个后跳到前一页,如:181(个数据)-1(个)=180(个)==18(页)-1(页)=17(页)
			cb.setSelectedItem(ys);// 设置前一页的页数
		}
		csh(cb);// 更新
	}

	public static void xg(JFrame f, JTable t) {// 修改

		int a = t.getSelectedRow();// 获取选中哪一行
		Hero he = h.L.get(a);// 取出那一行集合
		JDialog d = new JDialog(f);// 模态窗口
		d.setSize(400, 300);
		d.setLocation(300, 300);
		d.setLayout(null);
		d.setModal(true);

		JPanel p = new JPanel();// 面板
		p.setBounds(40, 20, 320, 150);
		p.setLayout(new GridLayout(2, 2, 60, 60));
		JLabel l = new JLabel("名称:");
		JLabel l1 = new JLabel("血量:");
		JTextField t1 = new JTextField();// 输入框
		t1.setText(he.name);
		JTextField t2 = new JTextField();
		t2.setText(String.valueOf(he.hp));

		JButton b = new JButton("确定");
		b.setBounds(200 - 50, 200, 100, 40);
		b.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				boolean boo = true;
				String mc = t2.getText();
				if (mc.equals("")) {// 名称不能什么都不输入
					JOptionPane.showMessageDialog(f, "名称不能为空");
					boo = false;
				}
				for (int i = 0; i < mc.length(); i++) {// 拆分输入的名称字符串
					if (Character.isWhitespace(mc.charAt(i))) {// 单个字符判断是否是空
						JOptionPane.showMessageDialog(f, "名称不能有空格");
						boo = false;
						break;// 是,结束循环
					}
				}

				String xl = t2.getText();
				if (xl.equals("")) {// 血量不能什么都不输入
					JOptionPane.showMessageDialog(f, "血量不能为空");
					boo = false;
				}
				for (int i = 0; i < xl.length(); i++) {// 拆分输入的血量字符串
					if (Character.isWhitespace(xl.charAt(i))) {// 单个字符判断是否为空
						JOptionPane.showMessageDialog(f, "血量不能有空格");
						boo = false;
						break;// 是,结束循环
					} else if (Character.isLetter(xl.charAt(i))) {// 单个字符判断是否是字母
						JOptionPane.showMessageDialog(f, "血量中不能有字母");
						boo = false;
						break;// 是,结束循环
					}
				}
				if (boo == true) {// 以上判断有问题,以下不运行
					he.name = t1.getText();
					he.hp = Float.parseFloat(t2.getText());
					ORM.update(he);
					JOptionPane.showMessageDialog(f, "修改完成!");
					h.L = ORM.list(HeroTableModel.one, HeroTableModel.two);// 查数据
					t.updateUI();// 更新数据
				}
			}
		});
		p.add(l);
		p.add(t1);
		p.add(l1);
		p.add(t2);
		d.add(b);
		d.add(p);
		d.setVisible(true);

	}

	public static void sy(JButton[] bu, JComboBox<String> cb) {// 首页

		HeroTableModel.one = 0;// 从第一个数据开始输出
		cb.setSelectedItem(String.valueOf(1));
		h.L = ORM.list(HeroTableModel.one, HeroTableModel.two);// 查数据
		t.updateUI();
	}

	public static void syy(JButton[] bu, JComboBox<String> cb) {// 上一页

		HeroTableModel.one = HeroTableModel.one - 10;
		String str = String.valueOf((HeroTableModel.one + 10) / 10);
		cb.setSelectedItem(str);// 设置每一次上一页页数
		h.L = ORM.list(HeroTableModel.one, HeroTableModel.two);// 查数据
		t.updateUI();// 更新数据
	}

	public static void xyy(JButton[] bu, JComboBox<String> cb) {// 下一页

		HeroTableModel.one = HeroTableModel.one + 10;
		String str = String.valueOf((HeroTableModel.one + 10) / 10);
		cb.setSelectedItem(str);// 设置每一次上一页页数
		h.L = ORM.list(HeroTableModel.one, HeroTableModel.two);// 查数据
		t.updateUI();// 更新数据
	}

	public static void my(JButton[] bu, JComboBox<String> cb) {// 末页
		int length = ORM.list().size();
		int a = length % 10;
		if (a == 0) {
			HeroTableModel.one = length - 10;
		} else {
			HeroTableModel.one = length - a;
		}
		String str = String.valueOf((HeroTableModel.one + 10) / 10);
		cb.setSelectedItem(str);// 设置末页页数
		h.L = ORM.list(HeroTableModel.one, HeroTableModel.two);// 查数据
		t.updateUI();// 更新数据

	}

	public static void csh(JComboBox<String> cb) {// 初始化下拉框
		int length = ORM.list().size();// 数据总个数
		int a = 0;
		if (length % 10 == 0) {// 如果是整数,如180个数据
			a = length / 10;// 下拉框就18页
		} else {// 数据如果不是整数,如182个数据
			a = (length / 10) + 1;// 下拉框就18+1页
		}
		cbListenerEnabled = false;// 禁止下拉框监听触发(老师作业视频中提到的)
		cb.removeAllItems();// 清空所有下拉框内的内容 以下重新初始化,为了增加删除后进行更新
		for (int i = 0; i < a; i++) {// 通过循环一个一个加入下拉框
			cb.addItem(String.valueOf(i + 1));
		}
		cbListenerEnabled = true;// 更新后启动下拉框监听
		String ys = String.valueOf((HeroTableModel.one / 10) + 1);// 与sc();的不一样,每次更新后读取更新前的的页数,进行设置,以免更新后页数变1,数据还是更新前页数的数据
		cb.setSelectedItem(ys);
	}

	public static void xlk(JComboBox<String> cb, JButton[] bu) {// 下拉框
		String st = (String) cb.getSelectedItem();
		int sj = Integer.parseInt(st + 0) - 10;// 第几个数据开始显示
		HeroTableModel.one = sj;

		int length = ORM.list().size();// 数据总个数
		int a = length % 10;
		if (HeroTableModel.one == 0) {// 首页、上一页按钮禁止使用
			bu[0].setEnabled(false);
			bu[1].setEnabled(false);
			bu[2].setEnabled(true);
			bu[3].setEnabled(true);
		} else if (HeroTableModel.one == length - 10) {// 如果数据条数是整数,辣么就不会新创下一个页面,出现新页面无数据的情况
			bu[0].setEnabled(true);
			bu[1].setEnabled(true);
			bu[2].setEnabled(false);
			bu[3].setEnabled(false);
		} else if (HeroTableModel.one == length - a) {// 下一页、末页按钮禁止使用
			bu[0].setEnabled(true);
			bu[1].setEnabled(true);
			bu[2].setEnabled(false);
			bu[3].setEnabled(false);
		} else {// 不是首页、末页全部开启使用
			bu[0].setEnabled(true);
			bu[1].setEnabled(true);
			bu[2].setEnabled(true);
			bu[3].setEnabled(true);
		}
		h.L = ORM.list(HeroTableModel.one, HeroTableModel.two);// 查数据
		t.updateUI();// 更新数据
	}

	public static void main(String[] args) {

		JFrame f = new JFrame();
		f.setSize(600, 500);
		f.setLocation(200, 200);
		f.setLayout(new BorderLayout());

		h = new HeroTableModel();// 读取数据
		t = new JTable(h);// 放入表格
		JScrollPane sp = new JScrollPane(t);// 把表格放入带滚动条的Panel (面板)

		JPanel p = new JPanel();
		p.setPreferredSize(new Dimension(100, 150));
		p.setLayout(new FlowLayout(1, 10, 20));

		t.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);// 设置只能选择一行数据
		t.getSelectionModel().setSelectionInterval(0, 0);// 初始化为第一行数据

		JButton zj = new JButton("增加");
		zj.setPreferredSize(new Dimension(90, 40));
		JButton sc = new JButton("删除");
		sc.setPreferredSize(new Dimension(90, 40));
		JButton xg = new JButton("修改");
		xg.setPreferredSize(new Dimension(90, 40));

		p.add(zj);
		p.add(sc);
		p.add(xg);

		JPanel p1 = new JPanel();
		p1.setPreferredSize(new Dimension(600, 70));
		p1.setLayout(new FlowLayout(1, 10, 10));

		JButton sy = new JButton("首页");
		sy.setPreferredSize(new Dimension(80, 30));
		JButton syy = new JButton("上一页");
		syy.setPreferredSize(new Dimension(80, 30));
		JButton xyy = new JButton("下一页");
		xyy.setPreferredSize(new Dimension(80, 30));
		JButton my = new JButton("末页");
		my.setPreferredSize(new Dimension(80, 30));

		JButton[] bu = new JButton[4];
		bu[0] = sy;
		bu[1] = syy;
		bu[2] = xyy;
		bu[3] = my;

		bu[0].setEnabled(false);// 初始化首页不能按
		bu[1].setEnabled(false);// 初始化上一页不能按

		JComboBox<String> cb = new JComboBox<>();// 下拉框
		csh(cb);

		p1.add(bu[0]);// 首页
		p1.add(bu[1]);
		p1.add(cb);// 下拉框
		p1.add(bu[2]);
		p1.add(bu[3]);// 末页
		p.add(p1, BorderLayout.SOUTH);

		f.add(sp, BorderLayout.CENTER);
		f.add(p, BorderLayout.SOUTH);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);

		zj.addActionListener(new ActionListener() {// 增加

			@Override
			public void actionPerformed(ActionEvent e) {
				zj(f, t, cb);
			}
		});
		sc.addActionListener(new ActionListener() {// 删除

			@Override
			public void actionPerformed(ActionEvent e) {
				sc(f, t, cb);
			}
		});
		xg.addActionListener(new ActionListener() {// 修改

			@Override
			public void actionPerformed(ActionEvent e) {
				xg(f, t);
			}
		});
		cb.addActionListener(new ActionListener() {// 下拉框

			@Override
			public void actionPerformed(ActionEvent e) {
				if (!cbListenerEnabled) {// 为防止运行到cb.removeAllItems();和cb.addItem();后启动下拉框监听(老师作业视频中有提到)
					return;
				}
				xlk(cb, bu);

			}
		});

		bu[0].addActionListener(new ActionListener() {// 首页

			@Override
			public void actionPerformed(ActionEvent e) {
				sy(bu, cb);
			}
		});
		bu[1].addActionListener(new ActionListener() {// 上一页

			@Override
			public void actionPerformed(ActionEvent e) {
				syy(bu, cb);
			}
		});
		bu[2].addActionListener(new ActionListener() {// 下一页

			@Override
			public void actionPerformed(ActionEvent e) {
				xyy(bu, cb);
			}
		});
		bu[3].addActionListener(new ActionListener() {// 末页

			@Override
			public void actionPerformed(ActionEvent e) {
				my(bu, cb);
			}
		});
	}
}

							


1 个答案

Jesse木子 答案时间:2019-05-13
下拉框我是查的百度让他自动到最底部 但是童鞋我建议自己做的过程中遇到难题1~3小时无法解决的 希望还是查阅一下资料或者看看源码 自己分析 不要死钻牛角尖



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-04-09 作业
歪脖树下自逍遥



有个烦人的bug: 首先我实现了通过下拉框分页(通过给JComboBox.addItemListener实现的), 然后我想通过点击上一页或下一页这些按钮时实时更新JComboBox的选定值(通过JComboBox.setSelected(index)来改变JComboBox的定值),但是这样会触发上面实现的监听器,因为那监听器是通过选定值的状态改变与否来触发的,所以这两个小功能互相冲突,暂时没想到好的思路来解决 (写成JcomboBox.addActionListener()也不行,我一直以为ActionListener是只能监听点击事件,但现在感觉也是通过状态的改变来监听的)
public class HeroTableMain {
	private static HeroDAOImp herodaoimp=null;
	
	private static HeroTableModel herotablemodel=null;
	
	private static JTable table=null;//表格
	
	private static JComboBox<String> combobox=null;//下拉框
	
	public static void main(String[] args) {
		initView();
	}
	
	/**
	 * 初始话主界面
	 * 为所有按钮绑定点击事件
	 */
	public static void initView() {
		JFrame frame = new JFrame("LoL");
        frame.setSize(500, 300);
        frame.setLocation(200, 200);
        frame.setLayout(new BorderLayout());
 
        //创建一个TableModel
        herotablemodel= new HeroTableModel();
        
        herodaoimp=new HeroDAOImp();
        
        //根据 TableModel来创建 Table
        table = new JTable(herotablemodel);
  
        JScrollPane scrollpane = new JScrollPane(table);
  
        JPanel panel=new JPanel();
        panel.setLayout(new FlowLayout());
        
        //在表格下方添加操作按钮,如添加,修改和删除等
        JButton addbtn=new JButton("添加");
        JButton deletebtn=new JButton("删除");
        JButton updatebtn=new JButton("修改");
        
        JPanel panel1=new JPanel();
        panel.setLayout(new FlowLayout());
        
        //在表格下方添加操作按钮,如添加,修改和删除等
        JButton firstpage=new JButton("首页");
        JButton prevpage=new JButton("上一页");
        JButton nextpage=new JButton("下一页");
        JButton lastpage=new JButton("末页");
        
        JButton[] btns=new JButton[4];
        btns[0]=firstpage;
        btns[1]=prevpage;
        btns[2]=nextpage;
        btns[3]=lastpage;
        
        firstpage.setEnabled(false);
        prevpage.setEnabled(false);
        
        /*
         * 为操作按钮绑定点击事件
         */
        addbtn.addActionListener(new ActionListener() {//添加信息按钮

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				showAddDialog(frame,btns);
			}
        	
        });
        
        deletebtn.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				showDeleteDialog(frame,btns);
			}
        	
        });
        
        updatebtn.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				showUpdateDialog(frame,btns);
			}
        	
        });
        
        /*
         * 为翻页按钮绑定点击事件
         */
        firstpage.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				goFirstPage(btns);
			}
        	
        });
        
        prevpage.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				goPrevPage(btns);
			}
        	
        });
        
        nextpage.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				goNextPage(btns);
			}
        	
        });
        
        lastpage.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				goLastPage(btns);
			}
        	
        });
        
        
        panel.add(addbtn);
        panel.add(deletebtn);
        panel.add(updatebtn);
        
        panel1.add(firstpage);
        panel1.add(prevpage);
        
        //初始化下拉框,并将此下拉框添加到前一页与后一页按钮之间
        initCombobox(panel1,btns);
        
        panel1.add(nextpage);
        panel1.add(lastpage);
        
        frame.add(scrollpane, BorderLayout.CENTER);
        frame.add(panel,BorderLayout.NORTH);
        frame.add(panel1,BorderLayout.SOUTH);
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
        frame.setVisible(true);
	}
	
	/**
	 * 初始话下拉框
	 * 首先将页码传给JComboBox
	 * 然后绑定点击事件
	 * @param panel
	 * @param btns
	 */
	private static void initCombobox(JPanel panel,JButton[] btns) {
		int length=herodaoimp.list().size();
		String[] pages=new String[length/10+1];
		//初始化所有页数
		for(int i=0;i<=length/10;i++) pages[i]=i+1+"";
		
		combobox=new JComboBox<>(pages);
		
		combobox.setSelectedIndex(length/10-herotablemodel.point/10-1);
		/*
		 * 与下面实现的通过点击上一页或下一页实时改变JcomboBox的选定值有冲突
		 */
		/*combobox.addItemListener(new ItemListener() {

			@Override
			public void itemStateChanged(ItemEvent e) {
				// TODO Auto-generated method stub
				int select=combobox.getSelectedIndex();
				System.out.println(select);
				herotablemodel.point=length-select*10-10;
				if(herotablemodel.point<0) {
					herotablemodel.heros=herodaoimp.list(0,herotablemodel.point+10);
				}else {
					herotablemodel.heros=herodaoimp.list(herotablemodel.point,10);
				}
				
				if(select==0) {
					btns[0].setEnabled(false);
					btns[1].setEnabled(false);
					btns[2].setEnabled(true);
					btns[3].setEnabled(true);
				}else if(select==length/10){
					btns[0].setEnabled(true);
					btns[1].setEnabled(true);
					btns[2].setEnabled(false);
					btns[3].setEnabled(false);
				}else {
					btns[0].setEnabled(true);
					btns[1].setEnabled(true);
					btns[2].setEnabled(true);
					btns[3].setEnabled(true);
				}
				table.updateUI();
			}
			
		});*/
		panel.add(combobox);
	}
	
	/**
	 * 跳转到末页
	 * @param btns
	 */
	private static void goLastPage(JButton[] btns) {
		
		int length=herodaoimp.list().size();
		if(herotablemodel.point<0) {//如果此条件成立,可能是发生了未知bug,因为此条件正常情况下不可能被触发
			btns[2].setEnabled(false);
			btns[3].setEnabled(false);
			System.err.println("gofirstpage,发生未知错误!");
		}else {
			if(length%10==0) {
				herotablemodel.heros=herodaoimp.list(0,10);
				herotablemodel.point=0;
			}else {
				herotablemodel.heros=herodaoimp.list(0,length%10);
				herotablemodel.point=length%10-10;
			}
			table.updateUI();
			
			/*
			 * 当点击上一页或下一页等时想利用下面这行代码来实时刷新JComboBox选定的item的
			 * 但是通过这种方法改变item的同时会触发上面JComboBox的绑定的点击事件
			 * 暂时没有找到好的方法解决这问题
			 */
			combobox.setSelectedIndex(length/10-herotablemodel.point/10);
			btns[0].setEnabled(true);
			btns[1].setEnabled(true);
			btns[2].setEnabled(false);
			btns[3].setEnabled(false);
		}
		
	}
	
	/**
	 * 跳转到下一页
	 * @param btns
	 */
	private static void goNextPage(JButton[] btns) {
		int length=herodaoimp.list().size();
		if((herotablemodel.point)>10) {
			herotablemodel.point=herotablemodel.point-10;//读取后十条信息
			if(herotablemodel.point>10) {
				herotablemodel.heros=herodaoimp.list(herotablemodel.point,10);
			}else {
				herotablemodel.heros=herodaoimp.list(0,herotablemodel.point);
			}
			table.updateUI();
			combobox.setSelectedIndex(length/10-herotablemodel.point/10-1);
			btns[0].setEnabled(true);
			btns[1].setEnabled(true);
			btns[2].setEnabled(true);
			btns[3].setEnabled(true);
			
		}else {
			herotablemodel.heros=herodaoimp.list(0,herotablemodel.point);
			herotablemodel.point=herotablemodel.point-10;
			table.updateUI();
			combobox.setSelectedIndex(length/10-herotablemodel.point/10);
			btns[2].setEnabled(false);
			btns[3].setEnabled(false);
			
		}
	}
	
	/**
	 * 跳转到上一页
	 * @param btns
	 */
	private static void goPrevPage(JButton[] btns) {
		int length=herodaoimp.list().size();
		if((herotablemodel.point+10)==length) {//如果此条件成立,可能是发生了未知bug,因为此条件正常情况下不可能被触发
			btns[0].setEnabled(false);
			btns[1].setEnabled(false);
			System.err.println("gofirstpage,发生未知错误!");
		}else {
			herotablemodel.point=herotablemodel.point+10;//读取前十条信息
			herotablemodel.heros=herodaoimp.list(herotablemodel.point,10);
			table.updateUI();
			combobox.setSelectedIndex(length/10-herotablemodel.point/10-1);
			if((herotablemodel.point+10)==length) {//判断读取的信息是不是最前面的十条信息
				
				btns[0].setEnabled(false);
				btns[1].setEnabled(false);
			}else {
				btns[0].setEnabled(true);
				btns[1].setEnabled(true);
				btns[2].setEnabled(true);
				btns[3].setEnabled(true);
			}
			
		}
	}
	
	/**
	 * 跳转到首页的方法
	 * 传入两个参数,其中btns用于保存四个按钮,如首页,上一页,下一页和末页等
	 * 此方法与首页按钮的点击事件绑定
	 * @param frame
	 * @param btns
	 */
	private static void goFirstPage(JButton[] btns) {
		int length=herodaoimp.list().size();
		if((herotablemodel.point+10)==length) {//如果此条件成立,可能是发生了未知bug,因为此条件正常情况下不可能被触发
			btns[0].setEnabled(false);
			btns[1].setEnabled(false);
			System.err.println("gofirstpage,发生未知错误!");
		}else {
			herotablemodel.point=length-10;//读取最前面的十条信息
			herotablemodel.heros=herodaoimp.list(herotablemodel.point,10);
			table.updateUI();
			combobox.setSelectedIndex(length/10-herotablemodel.point/10-1);
			btns[0].setEnabled(false);
			btns[1].setEnabled(false);
			btns[2].setEnabled(true);
			btns[3].setEnabled(true);
		}
		
	}
	
	/**
	 * 初始话修改的dialog界面
	 * 点击提交按钮可将选定的信息修改
	 * @param frame
	 * @param btns
	 */
	private static void showUpdateDialog(JFrame frame,JButton[] btns) {
		int row=table.getSelectedRow();
		if(row==-1) {
			JOptionPane.showMessageDialog(frame, "请选中你想修改的信息!");
		}else {
			int id=herotablemodel.heros.get(herotablemodel.heros.size()-1-row).id;
			
			JDialog dialog=new JDialog(frame);
			dialog.setModal(true);
			dialog.setSize(350,250);
			dialog.setLocation(275,250);
			dialog.setLayout(null);
			JLabel namelb=new JLabel("名称:");
			namelb.setBounds(75,30,100,25);
			JTextField nametf=new JTextField();
			nametf.setBounds(175, 30, 100,25);
			
			JLabel hplb=new JLabel("血量:");
			hplb.setBounds(75,75,100,25);
			JTextField hptf=new JTextField();
			hptf.setBounds(175,75, 100, 25);
			
			JButton submitbtn=new JButton("提交");
			submitbtn.setBounds(140, 140, 70, 25);
			
			dialog.add(namelb);
			dialog.add(nametf);
			dialog.add(hplb);
			dialog.add(hptf);
			dialog.add(submitbtn);

			
			submitbtn.addActionListener(new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {
					// TODO Auto-generated method stub
					String name=nametf.getText();
					String hp=hptf.getText();
					if((name==null||name.length()==0)||(hp==null||hp.length()==0)) {
						JOptionPane.showMessageDialog(frame,"名称或血量输入为空,请重新输入!");
					}else {
						boolean state=true;
						for(int i=0;i<hp.length();i++) {
							if(!(Character.isDigit(hp.charAt(i)))) {
								state=false;
								break;
							}
						}
						if(state) {
							Hero hero=new Hero();
							hero.id=id;
							hero.hp=Float.parseFloat(hp);
							hero.name=name;
							hero.damage=98;
							herodaoimp.update(hero);
							JOptionPane.showMessageDialog(dialog, "提交成功!");
							herotablemodel.point=herodaoimp.list().size()-10;
							System.out.println("成功将 id="+id+" 的信息改为了 name"+name+" hp="+hp);
							herotablemodel.heros=herodaoimp.list(herotablemodel.point,10);
							dialog.setVisible(false);
							combobox.setSelectedIndex(0);
							table.updateUI();
							btns[0].setEnabled(false);
							btns[1].setEnabled(false);
							btns[2].setEnabled(true);
							btns[3].setEnabled(true);
						}else {
							JOptionPane.showMessageDialog(dialog, "hp不能输入除数字以外的其他字符!");
						}
						
					}
				}
				
			});
			
			dialog.setVisible(true);
			
		}
	}
	
	/**
	 * 初始话删除的dialog界面
	 * 删除选定行的英雄信息
	 * @param frame
	 * @param btns
	 */
	private static void showDeleteDialog(JFrame frame,JButton[] btns) {
		int row=table.getSelectedRow();
		if(row==-1) {
			JOptionPane.showMessageDialog(frame, "删除前应选中一行!");
		}else {
			int option=JOptionPane.showConfirmDialog(frame, "确认要删除吗?");
			if(JOptionPane.OK_OPTION==option) {
				int id=herotablemodel.heros.get(herotablemodel.heros.size()-1-row).id;
				herodaoimp.delete(id);
				herotablemodel.point=herodaoimp.list().size()-10;
				herotablemodel.point--;
				herotablemodel.heros=herodaoimp.list(herotablemodel.point,10);
				combobox.setSelectedIndex(0);
				table.updateUI();
				System.out.println("成功删除  id="+id+" 的信息!");
				btns[0].setEnabled(false);
				btns[1].setEnabled(false);
				btns[2].setEnabled(true);
				btns[3].setEnabled(true);
			}else {
				System.out.println("用户取消删除!");
			}
			
		}
	}
	
	/**
	 * 初始话添加的dialog界面
	 * 点击提交按钮可将textfield框中的信息添加到数据库中
	 * @param frame
	 * @param btns
	 */
	private static void showAddDialog(JFrame frame,JButton[] btns) {//初始化添加信息界面以及操作
		JDialog dialog=new JDialog(frame);
		dialog.setModal(true);
		dialog.setSize(350,250);
		dialog.setLocation(275,250);
		dialog.setLayout(null);
		JLabel namelb=new JLabel("名称:");
		namelb.setBounds(75,30,100,25);
		JTextField nametf=new JTextField();
		nametf.setBounds(175, 30, 100,25);
		
		JLabel hplb=new JLabel("血量:");
		hplb.setBounds(75,75,100,25);
		JTextField hptf=new JTextField();
		hptf.setBounds(175,75, 100, 25);
		
		JButton submitbtn=new JButton("提交");
		submitbtn.setBounds(140, 140, 70, 25);
		
		dialog.add(namelb);
		dialog.add(nametf);
		dialog.add(hplb);
		dialog.add(hptf);
		dialog.add(submitbtn);
		
		
		submitbtn.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String name=nametf.getText();
				String hp=hptf.getText();
				if((name==null||name.length()==0)||(hp==null||hp.length()==0)) {
					JOptionPane.showMessageDialog(frame,"名称或血量输入为空,请重新输入!");
				}else {
					Hero hero=new Hero();
					hero.hp=Float.parseFloat(hp);
					hero.name=name;
					hero.damage=98;
					herodaoimp.add(hero);
					JOptionPane.showMessageDialog(dialog, "提交成功!");
					System.out.println("成功添加了一条 name="+name+" hp="+hp+"的新信息");
					herotablemodel.point=herodaoimp.list().size()-10;
					herotablemodel.heros=herodaoimp.list(herotablemodel.point,10);
					dialog.setVisible(false);
					table.updateUI();
					combobox.setSelectedIndex(0);
					btns[0].setEnabled(false);
					btns[1].setEnabled(false);
					btns[2].setEnabled(true);
					btns[3].setEnabled(true);
				}
			}
			
		});
		
		dialog.setVisible(true);
	}
}

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-03-30 作业~
2018-12-14 删除末尾页最后一行后,t.getSelectedRow()竟然没变-1
2018-03-29 站长,发现一个错误
2018-02-03 感觉自己写的代码很凌乱
2018-02-01 关于匿名类的疑问
2017-10-11 最后的下拉框分页查询 为什么我在按“上一页” “下一页”代码时,下拉框报错
2017-08-16 静态内部类的地方有点小问题
2017-05-06 为什么我的不能一页一页的显示呢??




提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 中级-图形界面-表格综合练习 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 1001964108
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图