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-11-10 怀疑人生
尹文




调bug调到我怀疑人生,终于搞好了,碰到两个问题,一:下拉列表不能一个Item都没有,还有按钮的判断没有做好
package swingTest;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.text.DecimalFormat;

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 Test1 {
	/**
	 * 每一页的记录数
	 */
	static int numForPage = 10;
	/**
	 * 当前页码
	 */
	static int page = 1;
	static int heroNum = new HeroDAO().getTotalNum();
	static int pageNum = heroNum % numForPage == 0? heroNum / numForPage : heroNum / numForPage + 1;
	/**
	 * Hero表格模板
	 */
	static HeroTableModel ht = new HeroTableModel((page - 1) * numForPage, numForPage);
	/**
	 * Hero表格
	 */
	static JTable t = new JTable(ht);
	static JButton bFirstPage = new JButton("首页");
	static JButton bPreviousPage = new JButton("上一页");
	static JButton bNextPage = new JButton("下一页");
	static JButton bLastPage = new JButton("尾页");
	static Integer[] is = getBoxArr();
	static HeroJComboBox<Integer> cb = new HeroJComboBox<>(is);
	
	public static void main(String[] args) {
		final JFrame f = new JFrame("Test1");
		f.setSize(500, 460);
		f.setLocationRelativeTo(null);
		f.setLayout(new BorderLayout());
		
		JScrollPane sp = new JScrollPane(t);
		sp.setPreferredSize(new Dimension(500, 300));
		// 设置选择模式为 只能选中一行
        t.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        // 选中第一行 (基本0)
        t.getSelectionModel().setSelectionInterval(0, 0);
        t.setRowHeight(25);
        
		//面板1
		JPanel p = new JPanel();
		p.setLayout(new FlowLayout());
		JButton bAdd = new JButton("-添加-");
		JButton bDelete = new JButton("-删除-");
		JButton bModify = new JButton("-修改-");
		bDelete.setSize(80, 30);
		bAdd.setSize(80, 30);
		bModify.setSize(80, 30);
		p.add(bAdd);
		p.add(bDelete);
		p.add(bModify);
		
		//面板2
		JPanel p2 = new JPanel();
		p2.setLayout(new FlowLayout());
		checkButton();
		bFirstPage.setSize(80, 30);
		bPreviousPage.setSize(80, 30);
		bNextPage.setSize(80, 30);
		bLastPage.setSize(80, 30);
		p2.add(bFirstPage);
		p2.add(bPreviousPage);
		p2.add(cb);
		p2.add(bNextPage);
		p2.add(bLastPage);
		
		bFirstPage.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				page = 1;
				checkButton();
				updateTable();
			}
		});
		bPreviousPage.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				page -= 1;
				checkButton();
				updateTable();
			}
		});
		bNextPage.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				page += 1;
				checkButton();
				updateTable();
			}
		});
		bLastPage.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				page = pageNum;
				checkButton();
				updateTable();
			}
		});
		
		bAdd.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				new AddJDialog(f).setVisible(true);
			}
		});
		bDelete.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int rowIndex = t.getSelectedRow();
				if(-1 == rowIndex){
					JOptionPane.showMessageDialog(f, "删除前请选择一行");
					return;
				}
				if(JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(f, "您确定要删除这一行记录吗")){
					return;
				}
				int id = ht.heros.get(rowIndex).id;
				new HeroDAO().delete(id);
				
				resetPage();
				updateTable();
			}
		});
		bModify.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int rowIndex = t.getSelectedRow();
				if(-1 == rowIndex){
					JOptionPane.showMessageDialog(f, "修改前请选择一行");
					return;
				}
				Hero hero = ht.heros.get(rowIndex);
				String name = hero.name;
				String hp = hero.hp + "";
				int id = hero.id;
				
				new ModifyJDialog(f, name, hp, id).setVisible(true);
			}
		});
		
		f.add(p, BorderLayout.CENTER);
		f.add(sp, BorderLayout.NORTH);
		f.add(p2, BorderLayout.SOUTH);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}
	
	static class AddJDialog extends JDialog{
		JLabel l1 = new JLabel("名称");
		JLabel l2 = new JLabel("血量");
		JTextField tf1 = new JTextField();
		JTextField tf2 = new JTextField();
		JButton b = new JButton("提交");
		
		AddJDialog(JFrame f){
			super(f);
			this.setSize(300, 300);
			this.setModal(true);
			int gap = 50;
			this.setLayout(null);
			this.setLocationRelativeTo(f);
			
			l1.setBounds(30, 30, 50, 30);
			tf1.setBounds(160, 30, 80, 30);
			l2.setBounds(30, 140, 50, 30);
			tf2.setBounds(160, 140, 80, 30);
			b.setBounds(110, 210, 80, 30);
			
			this.add(l1);
			this.add(tf1);
			this.add(l2);
			this.add(tf2);
			this.add(b);
			
			b.addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent e) {
					String result = checkMessage(tf1, tf2);
					if(null != result){
						JOptionPane.showMessageDialog(f, result);
						tf1.setText("");
						tf2.setText("");
						return;
					}
					String name = tf1.getText();
					float hp = Float.parseFloat(new DecimalFormat("#000000.00").format(Float.parseFloat(tf2.getText())));
					Hero hero = new Hero();
					hero.name = name;
					hero.hp = hp;
					
					System.out.println(page + "--------------2");
					HeroDAO hDAO = new HeroDAO();
					hDAO.add(hero);
					page = 1;
					
					JOptionPane.showMessageDialog(f, "提交成功 ");
                    
                    AddJDialog.this.setVisible(false);
                    System.out.println(page + "--------------1");
                    checkButton();
                    System.out.println(page + "--------------3");
                    resetPage();
                    System.out.println(page + "--------------4");
                    updateTable();
				}
			});
		}
	}
	
	static class ModifyJDialog extends JDialog{
		JLabel l1 = new JLabel("名称");
		JLabel l2 = new JLabel("血量");
		JTextField tf1 = new JTextField();
		JTextField tf2 = new JTextField();
		JButton b = new JButton("提交修改");
		
		ModifyJDialog(JFrame f, String name, String hp, int id){
			super(f);
			this.setSize(300, 300);
			this.setModal(true);
			int gap = 50;
			this.setLayout(null);
			this.setLocationRelativeTo(f);
			
			tf1.setText(name);
			tf2.setText(hp);
			
			l1.setBounds(30, 30, 50, 30);
			tf1.setBounds(160, 30, 80, 30);
			l2.setBounds(30, 140, 50, 30);
			tf2.setBounds(160, 140, 80, 30);
			b.setBounds(110, 210, 80, 30);
			
			this.add(l1);
			this.add(tf1);
			this.add(l2);
			this.add(tf2);
			this.add(b);
			
			b.addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent e) {
					String result = checkMessage(tf1, tf2);
					if(null != result){
						JOptionPane.showMessageDialog(f, result);
						tf1.setText(name);
						tf2.setText(hp);
						return;
					}
					if(tf1.getText().equals(name) && tf2.getText().equals(hp)){
						JOptionPane.showMessageDialog(f, "要修改的数据和之前一样");
						return;
					}
					String name = tf1.getText();
					float hp = Float.parseFloat(new DecimalFormat("#000000.00").format(Float.parseFloat(tf2.getText())));
					Hero hero = new Hero();
					hero.name = name;
					hero.hp = hp;
					hero.id = id;
					HeroDAO hDAO = new HeroDAO();
					hDAO.update(hero);
					
					JOptionPane.showMessageDialog(f, "修改成功 ");
                    
                    ModifyJDialog.this.setVisible(false);
                    updateTable();
				}
			});
		}
	}
	
	public static String checkMessage(JTextField tf1, JTextField tf2){
		String name = tf1.getText();
		String hp = tf2.getText();
		
		DecimalFormat df =new DecimalFormat("#000000.00");
		//处理name
		if(name.length() > 10){
			return "输入的name已经超过字数允许";
		}
		try{
			Float.parseFloat(hp);
		}catch(NumberFormatException e){
			return "您输入的hp不是一个合法的数字";
		}
		
		return null;
	}
	
	public static void updateTable(){
		checkButton();
		System.out.println(page);
		ht.heros = new HeroDAO().list((page - 1) * numForPage, numForPage);
		t.updateUI();
		if(!ht.heros.isEmpty())
            t.getSelectionModel().setSelectionInterval(0, 0);
		cb.setSelectedItem(page);
	}
	
	/**
	 * 更新按钮的状态
	 * @param bfirstPage
	 * @param bPreviousPage
	 * @param bNextPage
	 * @param bLastPage
	 */
	public static void checkButton(){
		if(page == 1){
			bFirstPage.setEnabled(false);
			bPreviousPage.setEnabled(false);
			bNextPage.setEnabled(true);
			bLastPage.setEnabled(true);
		}
		if(page >1 && page < pageNum){
			bFirstPage.setEnabled(true);
			bPreviousPage.setEnabled(true);
			bNextPage.setEnabled(true);
			bLastPage.setEnabled(true);
		}
		if(page == pageNum){
			bFirstPage.setEnabled(true);
			bPreviousPage.setEnabled(true);
			bNextPage.setEnabled(false);
			bLastPage.setEnabled(false);
		}
	}
	
	public static Integer[] getBoxArr(){
		Integer[] arr = new Integer[pageNum];
		
		for(int i = 1;i <= arr.length;i++){
			arr[i - 1] = i;
		}
		
		return arr;
	}
	
	public static void resetPage(){
		heroNum = new HeroDAO().getTotalNum();
		pageNum = heroNum % numForPage == 0? heroNum / numForPage : heroNum / numForPage + 1;
		System.out.println(page + "-----------fuck");
//		cb.removeAllItems();
		System.out.println(is.length);
		for(int i = 0;i < is.length;i++){
			if(i > 0)
				cb.removeItem(is[i]);
		}
		System.out.println(page + "-----------juju");
		is = getBoxArr();
		for(int i = 0;i < is.length;i++){
			if(i > 0)
				cb.addItem(is[i]);
		}
	}
	
	static class HeroJComboBox<Integer> extends JComboBox{
		public HeroJComboBox(Integer[] is){
			super(is);
			
			this.addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent e) {
					page = HeroJComboBox.this.getSelectedIndex() + 1;
					updateTable();
				}
			});
			
		}
	}
}

							





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





2019-10-13 给大家参考下,写的还算清晰把
lyqmy




给大家参考下,写的还算清晰把
package testGUI;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
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 HeroTableOperationByPage {
	private int  ITEMS_PER_PAGE = 10;
	HeroTableModel htm;
	int currentPageIndex = 0;
	int pageNum;
	JTable table;
    JButton firstPageBtn;
    JButton previousPageBtn;        
    JComboBox<String> pageCbx;
    JButton nextPageBtn;
    JButton lastPageBtn;
    boolean isPageCbxSelectedByOthers = false;
	public HeroTableOperationByPage(int itemsPerPage)
	{
		ITEMS_PER_PAGE = itemsPerPage;
        JFrame frame = new JFrame("Hero编辑器");
        frame.setSize(800, 600);
        frame.setLocation(200, 200);
        frame.setLayout(new BorderLayout());
        
        htm = new HeroTableModel();
        table = new JTable(htm);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.getSelectionModel().setSelectionInterval(0, 0);
        pageNum = getPageNum();
        currentPageIndex = 0;        
        
        JScrollPane tablePane = new JScrollPane(table);
        
        JPanel operationPanel = new JPanel();
        operationPanel.setLayout(new FlowLayout());
        JButton addBtn = new JButton("增加");
        JButton delBtn = new JButton("删除");
        JButton editBtn = new JButton("编辑");
        operationPanel.add(addBtn);
        operationPanel.add(delBtn);
        operationPanel.add(editBtn);
        
        addBtn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {				
				createOperateDialog(frame, 1, -1);

			}
		});
        delBtn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int row = table.getSelectedRow();
				if(row < 0)
				{
					JOptionPane.showMessageDialog(frame, "删除前请先选中一行数据");
					return;
				}
				htm.heroDao.delete((int)(htm.getValueAt(row, 0)));
				pageNum = getPageNum();
				if(currentPageIndex >= pageNum)
				{
					currentPageIndex = pageNum - 1;
				}
				updateCurrentPage(true);
				table.getSelectionModel().setSelectionInterval(0, 0);
				
			}
		});
        editBtn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				int row = table.getSelectedRow();
				if(row < 0)
				{
					JOptionPane.showMessageDialog(frame, "编辑前请先选中一行数据");
					return;
				}
				
				createOperateDialog(frame, 2, (int)(htm.getValueAt(row, 0)));
			}
		});
        
        JPanel pagePanel = new JPanel();
        pagePanel.setLayout(new FlowLayout());
        firstPageBtn = new JButton("首页");
        previousPageBtn = new JButton("上一页");        
        pageCbx = new JComboBox<String>(getPageArray(pageNum));
        pageCbx.setSelectedIndex(0);
        nextPageBtn = new JButton("下一页");
        lastPageBtn = new JButton("末页");
        pagePanel.add(firstPageBtn);
        pagePanel.add(previousPageBtn);
        pagePanel.add(pageCbx);
        pagePanel.add(nextPageBtn);
        pagePanel.add(lastPageBtn);
        
        firstPageBtn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if(currentPageIndex == 0)
				{
					return;
				}
				currentPageIndex = 0;
				updateCurrentPage(true);
			}
		});
        previousPageBtn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if(currentPageIndex == 0)
				{
					return;
				}
				currentPageIndex -= 1;
				updateCurrentPage(true);
			}
		});
        pageCbx.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if(isPageCbxSelectedByOthers)
				{
					isPageCbxSelectedByOthers = false;
					return;
				}
				System.out.println("pageCbx actionPerformed");
				currentPageIndex = pageCbx.getSelectedIndex();
				updateCurrentPage(false);
			}
		});
        nextPageBtn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if(currentPageIndex >= pageNum - 1)
				{
					return;
				}
				currentPageIndex += 1;
				updateCurrentPage(true);
			}
		});
        lastPageBtn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				if(pageNum <= 1)
				{
					return;
				}
				if(currentPageIndex == pageNum - 1)
				{
					return;
				}
				
				currentPageIndex = pageNum - 1;
				updateCurrentPage(true);
			}
		});

        updateCurrentPage(true);
        
        frame.add(tablePane, BorderLayout.NORTH);
        frame.add(operationPanel, BorderLayout.CENTER);
        frame.add(pagePanel, BorderLayout.SOUTH);
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
	}
	void createOperateDialog(JFrame frame, int type, int heroId)
	{
		JDialog dialog = new JDialog(frame);
		dialog.setLocation(50, 50);
		dialog.setSize(400, 200);
		dialog.setLayout(new BorderLayout());
		
		final JLabel lName = new JLabel("名称");
		final JTextField tfName = new JTextField("");
		tfName.setPreferredSize(new Dimension(80, 30));
		JPanel namePanel = new JPanel();
		namePanel.add(lName);
		namePanel.add(tfName);
		
		final JLabel lHp = new JLabel("血量");
		final JTextField tfHp = new JTextField("");
		tfHp.setPreferredSize(new Dimension(80, 30));
		JPanel hpPanel = new JPanel();
		hpPanel.add(lHp);
		hpPanel.add(tfHp);
		
		JButton commitBtn = new JButton("提交");
		commitBtn.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				Hero h = new Hero();
				String name = tfName.getText().trim();
                // 通过name长度判断 名称是否为空
                if (name.length() == 0) {
                    // 弹出对话框提示用户
                    JOptionPane.showMessageDialog(dialog, "名称不能为空");	 
                    // 名称输入框获取焦点
                    tfName.grabFocus();
                    return;
                }
 
                String hp = tfHp.getText().trim();
                float fHp = 0.0f;
                try {
                    // 把hp转换为浮点型,如果出现异常NumberFormatException表示不是浮点型格式
                	fHp = Float.parseFloat(hp);
                } catch (NumberFormatException e1) {
                    JOptionPane.showMessageDialog(dialog, "血量只能是小数 ");
                    tfHp.grabFocus();
                    return;
                }
				h.name = name;
				h.hp = fHp;
				HeroDAO dao = htm.heroDao;
				if(type == 1)//新增
				{				
					dao.add(h);
					
					pageNum = getPageNum();
					currentPageIndex = pageNum - 1;
					updateCurrentPage(true);					
					int rowIndex = htm.getRowCount() - 1;
			        table.getSelectionModel().setSelectionInterval(rowIndex, rowIndex);
			        table.scrollRectToVisible(table.getCellRect(rowIndex, 0, true));
				}
				else if(type == 2)//更新
				{
					h.id = heroId;
					dao.update(h);
					
					updateCurrentPage(true);
			        table.getSelectionModel().setSelectionInterval(0, 0);
				}

				dialog.dispose();
			}
		});

		dialog.add(namePanel, BorderLayout.NORTH);
		dialog.add(hpPanel, BorderLayout.CENTER);
		dialog.add(commitBtn, BorderLayout.SOUTH);
		
		dialog.setVisible(true);
		
	}
	
	int operateHero(JDialog dialog, String name, String hp, int type, int heroId)
	{

		return 0;
	}
	
	void updateCurrentPage(boolean pageCbxUpdateByOthers)
	{
		if(pageCbxUpdateByOthers)
		{
			isPageCbxSelectedByOthers = pageCbxUpdateByOthers;
		}
		updatePageControls();
		if(pageNum <= 1 || currentPageIndex >= pageNum)
		{
			return;
		}
		
		htm.heros = htm.heroDao.list(currentPageIndex * ITEMS_PER_PAGE, ITEMS_PER_PAGE);
		table.updateUI();
		table.getSelectionModel().setSelectionInterval(0, 0);		
	}
	void updatePageControls()
	{
		firstPageBtn.setEnabled(true);
		previousPageBtn.setEnabled(true);
		nextPageBtn.setEnabled(true);
		lastPageBtn.setEnabled(true);
		if(pageNum <= 1)
		{
			return;
		}
		if(currentPageIndex == 0)
		{
			firstPageBtn.setEnabled(false);
			previousPageBtn.setEnabled(false);
		}
		if(currentPageIndex == pageNum - 1)
		{
			lastPageBtn.setEnabled(false);
			nextPageBtn.setEnabled(false);
		}
		if(pageNum != pageCbx.getItemCount())
		{
			pageCbx.removeAllItems();			
			for(String each : getPageArray(pageNum))
			{
				pageCbx.addItem(each);
			}
		}
		pageCbx.setSelectedIndex(currentPageIndex);
		
	}
	
	String[] getPageArray(int pageNum)
	{
		int num = pageNum;
		if(pageNum <= 0)
		{
			num  = 1;
		}
		String[] pages = new String[num];
		for(int i = 1; i <= num; i++)
		{
			pages[i - 1] = Integer.toString(i);
		}
		
		return pages;
	}
	private int getPageNum()
	{
        int rowSum = htm.heroDao.list().size();
        int numPage = (int)(rowSum / ITEMS_PER_PAGE);
        if(rowSum % ITEMS_PER_PAGE != 0)
        {
        	numPage += 1;
        }
        
        System.out.println("pagenum=" + numPage);
        return numPage;
	}
}

							





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





2019-06-30 ZZ交作业 带全功能的表格
2019-06-30 ZZ交作业 带全功能的表格
2019-05-07 最终作业,我已经很严谨了,但还是求大佬进行优化!!!
2019-04-09 作业
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群交流: 982790551
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图