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-06-30 ZZ交作业 带全功能的表格
来载



有时候还是得看视频才能懂一些东西,比如cb为了防止在更新按钮状态时又调用其监听器导致递归死循环,用一个boolean变量使得监听器无反应,逻辑确实得严密些
public class HeroTable2 {
	public static int currentPage;
	public static int lastPage;
	public static boolean ok = true;

	static JFrame f = new JFrame("Hero表格");

	static JButton bEdit = new JButton("编辑数据");
	static JButton bAdd = new JButton("增加数据");
	static JButton bDel = new JButton("删除数据");

	static JButton bFirstPage = new JButton("首页");
	static JButton bPreviousPage = new JButton("上一页");
	static JButton bNextPage = new JButton("下一页");
	static JButton bLastPage = new JButton("末页");
	static JComboBox<Object> cb = new JComboBox<Object>();
	public static boolean cbListenerEnabled = true;

	static JLabel l = new JLabel();

	public static void isEmpty(JTextField tf, String msg) {
		if (!ok)
			return;
		if (0 == tf.getText().length()) {
			JOptionPane.showMessageDialog(f, msg + "不能为空,请确认!");
			ok = false;
		}
	}

	public static void isNumber(JTextField tf, String msg) {
		if (!ok)
			return;
		try {
			Double.parseDouble(tf.getText());
		} catch (NumberFormatException e) {
			JOptionPane.showMessageDialog(f, msg + "必须是数字,请确认!");
			ok = false;
		}
	}

	public static void isInt(JTextField tf, String msg) {
		if (!ok)
			return;
		try {
			Integer.parseInt(tf.getText());
		} catch (NumberFormatException e) {
			JOptionPane.showMessageDialog(f, msg + "必须是整数,请确认!");
			ok = false;
		}
	}

	public static void updateButtonStatus(int currentPage, int lastPage) {
		bDel.setEnabled(true);
		bFirstPage.setEnabled(true);
		bPreviousPage.setEnabled(true);
		bNextPage.setEnabled(true);
		bLastPage.setEnabled(true);

		if (new HeroDAO().list().size() == 0)
			bDel.setEnabled(false);

		if (currentPage == 1 || lastPage == 0) {
			bFirstPage.setEnabled(false);
			bPreviousPage.setEnabled(false);
		}
		if (currentPage == lastPage || lastPage == 0) {
			bNextPage.setEnabled(false);
			bLastPage.setEnabled(false);
		}

		String str = String.format("当前是第%d页,共%d页", currentPage, lastPage);
		l.setText(str);

		// 因为cb在执行.removeAllItems()等方法时会触发监听器,所以需得先令监听器赞不做出反应才可以执行这些方法
		// 否则就形成了递归逻辑,会出错
		cbListenerEnabled = false;
		if (cb.getItemCount() != 0)
			cb.removeAllItems();
		for (int i = 0; i < lastPage; i++)
			cb.addItem(i + 1);
		// 令cb选定某个页面
		cb.setSelectedItem(currentPage);
		cbListenerEnabled = true;
	}

	public static void main(String[] args) {
		f.setSize(800, 600);
		f.setLocation(300, 300);
		f.setLayout(null);

		HeroTableModel htm = new HeroTableModel();
		currentPage = 1;
		HeroDAO hd = new HeroDAO();
		// HeroDAO的list方法右边的参数是count,即从左边参数(起点下标)开始总共有多少项数据;
		// 即使起始加上count大于size也没关系,会自动列到最后一项数据为止
		htm.heros = hd.list(currentPage * 10 - 10, 10);
		if (hd.list().size() > 10) {
			if (hd.list().size() % 10 == 0)
				lastPage = hd.list().size() / 10;
			else
				lastPage = hd.list().size() / 10 + 1;
		} else
			lastPage = 1;
		// 初始化时根据生成的lastPage和当前页更新页面按钮状态
		updateButtonStatus(currentPage, lastPage);

		JTable t = new JTable(htm);
		t.getSelectionModel().setSelectionInterval(0, 0);

		JScrollPane sp = new JScrollPane(t);
		sp.setBounds(0, 0, 780, 300);

		// 增加数据编辑页面的模态窗口
		JDialog dAdd = new JDialog(f);
		dAdd.setModal(true);
		dAdd.setTitle("新增数据编辑");
		dAdd.setSize(400, 350);
		dAdd.setLocation(400, 400);
		dAdd.setResizable(false);
		dAdd.setLayout(null);

		JPanel p1 = new JPanel();
		p1.setBounds(20, 50, 340, 50);
		p1.setLayout(new FlowLayout());
		JLabel l1 = new JLabel("名称:");
		l1.setPreferredSize(new Dimension(120, 30));
		JTextField tf1 = new JTextField();
		tf1.setPreferredSize(new Dimension(150, 30));
		p1.add(l1);
		p1.add(tf1);

		JPanel p2 = new JPanel();
		p2.setBounds(20, 120, 340, 50);
		p2.setLayout(new FlowLayout());
		JLabel l2 = new JLabel("血量(数字):");
		l2.setPreferredSize(new Dimension(120, 30));
		JTextField tf2 = new JTextField();
		tf2.setPreferredSize(new Dimension(150, 30));
		p2.add(l2);
		p2.add(tf2);

		JPanel p3 = new JPanel();
		p3.setBounds(20, 190, 340, 50);
		p3.setLayout(new FlowLayout());
		JLabel l3 = new JLabel("伤害(整数):");
		l3.setPreferredSize(new Dimension(120, 30));
		JTextField tf3 = new JTextField();
		tf3.setPreferredSize(new Dimension(150, 30));
		p3.add(l3);
		p3.add(tf3);

		JButton b1 = new JButton("提交");
		b1.setBounds(150, 250, 80, 50);
		b1.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				isEmpty(tf1, "名称");
				isEmpty(tf2, "血量");
				isNumber(tf2, "血量");
				isEmpty(tf3, "伤害");
				isInt(tf3, "伤害");

				if (ok) {
					HeroDAO hd = new HeroDAO();
					Hero h = new Hero();
					h.name = tf1.getText();
					h.hp = (float) Double.parseDouble(tf2.getText());
					h.damage = Integer.parseInt(tf3.getText());
					hd.add(h);
					if (hd.list().size() % 10 == 0)
						lastPage = hd.list().size() / 10;
					else
						lastPage = hd.list().size() / 10 + 1;
					htm.heros = hd.list(currentPage * 10 - 10, 10);
					t.updateUI();
					updateButtonStatus(currentPage, lastPage);
					JOptionPane.showMessageDialog(f, "提交成功");
				}
				ok = true;
			}
		});

		dAdd.add(p1);
		dAdd.add(p2);
		dAdd.add(p3);
		dAdd.add(b1);

		// 主页面删除数据页面的入口按钮
		bAdd.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				tf1.setText(null);
				tf2.setText(null);
				tf3.setText(null);
				dAdd.setVisible(true);
			}
		});

		// 删除数据的按钮
		bDel.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// 返回选中的所有行
				int[] rows = t.getSelectedRows();
				// 返回选中的开头一行
				// int row = t.getSelectedRow();
				if (rows.length == 0) {
					JOptionPane.showMessageDialog(f, "未选中任何数据!");
					return;
				}
				int option = JOptionPane.showConfirmDialog(f, "是否删除选中数据 ?");
				if (JOptionPane.OK_OPTION == option) {
					HeroDAO hd = new HeroDAO();
					for (int i = 0; i < rows.length; i++) {
						Hero h = htm.heros.get(rows[i]);
						hd.delete(h.id);
					}
					t.getSelectionModel().setSelectionInterval(0, 0);

					if (hd.list().size() % 10 == 0) {
						// size是10的倍数且当前页即末页说明末页内容删光了,需跳转显示上一页的内容
						if (currentPage == lastPage)
							currentPage--;
						lastPage = hd.list().size() / 10;
					} else
						lastPage = hd.list().size() / 10 + 1;
					htm.heros = hd.list(currentPage * 10 - 10, 10);
					t.updateUI();
					updateButtonStatus(currentPage, lastPage);
					JOptionPane.showMessageDialog(f, "已删除选中数据!");
				}
			}
		});

		// 数据编辑模态窗口
		JDialog dEdit = new JDialog(f);
		dAdd.setModal(true);
		dEdit.setTitle("数据修改");
		dEdit.setSize(400, 350);
		dEdit.setLocation(400, 400);
		dEdit.setResizable(false);
		dEdit.setLayout(null);

		JPanel p4 = new JPanel();
		p4.setBounds(20, 50, 340, 50);
		p4.setLayout(new FlowLayout());
		JLabel l4 = new JLabel("名称:");
		l4.setPreferredSize(new Dimension(120, 30));
		JTextField tf4 = new JTextField();
		tf4.setPreferredSize(new Dimension(150, 30));
		p4.add(l4);
		p4.add(tf4);

		JPanel p5 = new JPanel();
		p5.setBounds(20, 120, 340, 50);
		p5.setLayout(new FlowLayout());
		JLabel l5 = new JLabel("血量(数字):");
		l5.setPreferredSize(new Dimension(120, 30));
		JTextField tf5 = new JTextField();
		tf5.setPreferredSize(new Dimension(150, 30));
		p5.add(l5);
		p5.add(tf5);

		JPanel p6 = new JPanel();
		p6.setBounds(20, 190, 340, 50);
		p6.setLayout(new FlowLayout());
		JLabel l6 = new JLabel("伤害(整数):");
		l6.setPreferredSize(new Dimension(120, 30));
		JTextField tf6 = new JTextField();
		tf6.setPreferredSize(new Dimension(150, 30));
		p6.add(l6);
		p6.add(tf6);

		JButton b2 = new JButton("提交");
		b2.setBounds(150, 250, 80, 50);
		b2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				isEmpty(tf4, "名称");
				isEmpty(tf5, "血量");
				isNumber(tf5, "血量");
				isEmpty(tf6, "伤害");
				isInt(tf6, "伤害");

				if (ok) {
					int row = t.getSelectedRow();
					if (row == -1) {
						JOptionPane.showMessageDialog(f, "未选中任何数据!");
						return;
					}
					int option = JOptionPane.showConfirmDialog(f, "是否修改选中数据 ?");
					if (JOptionPane.OK_OPTION == option) {
						Hero h = new Hero();
						h.id = htm.heros.get(row).id;
						h.name = tf4.getText();
						h.hp = (float) Double.parseDouble(tf5.getText());
						h.damage = Integer.parseInt(tf6.getText());

						HeroDAO hd = new HeroDAO();
						hd.update(h);

						htm.heros = hd.list();
						t.updateUI();
						JOptionPane.showMessageDialog(f, "已修改选中数据!");
						dEdit.setVisible(false);
					}
				}
				ok = true;
			}
		});

		dEdit.add(p4);
		dEdit.add(p5);
		dEdit.add(p6);
		dEdit.add(b2);

		// 主页面编辑数据页面的入口按钮
		bEdit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				tf4.setText(null);
				tf5.setText(null);
				tf6.setText(null);
				dEdit.setVisible(true);
			}
		});

		// 增加、删除、编辑按钮的整合面板
		JPanel pControl = new JPanel();
		pControl.setBounds(0, 350, 780, 60);
		pControl.setLayout(new FlowLayout());
		pControl.add(bAdd);
		pControl.add(bDel);
		pControl.add(bEdit);

		// 页面按钮组件添加监听器
		bFirstPage.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				currentPage = 1;
				htm.heros = hd.list(currentPage * 10 - 10, 10);
				t.updateUI();
				updateButtonStatus(currentPage, lastPage);
			}
		});

		bPreviousPage.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				currentPage--;
				htm.heros = hd.list(currentPage * 10 - 10, 10);
				t.updateUI();
				updateButtonStatus(currentPage, lastPage);
			}
		});

		bNextPage.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				currentPage++;
				htm.heros = hd.list(currentPage * 10 - 10, 10);
				t.updateUI();
				updateButtonStatus(currentPage, lastPage);
			}
		});

		bLastPage.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				currentPage = lastPage;
				htm.heros = hd.list(currentPage * 10 - 10, 10);
				t.updateUI();
				updateButtonStatus(currentPage, lastPage);
			}
		});

		cb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// 为避免在updateButtonStatus时因会触发cb的监听器而导致递归死循环,在updateButtonStatus令监听器不做反应
				if (!cbListenerEnabled)
					return;
				currentPage = (int) cb.getSelectedItem();
				System.out.println(currentPage);
				htm.heros = hd.list(currentPage * 10 - 10, 10);
				t.updateUI();
				updateButtonStatus(currentPage, lastPage);
			}
		});

		// 页面按钮整合面板
		JPanel pPage = new JPanel();
		pPage.setBounds(0, 430, 780, 60);
		pPage.setLayout(new FlowLayout());
		pPage.add(bFirstPage);
		pPage.add(bPreviousPage);
		pPage.add(cb);
		pPage.add(bNextPage);
		pPage.add(bLastPage);

		String str = String.format("当前是第%d页,共%d页", currentPage, lastPage);
		l.setText(str);
		l.setBounds(320, 500, 160, 50);

		f.add(sp);
		f.add(pControl);
		f.add(pPage);
		f.add(l);

		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);

	}
}

							





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





2019-06-30 ZZ交作业 带全功能的表格
来载



有时还是得看下视频才能懂一些东西,比如cb为了防止在更新按钮状态时调用监听器导致递归死循环,用一个布林值使得监听器不做反应
public class HeroTable2 {
	public static int currentPage;
	public static int lastPage;
	public static boolean ok = true;

	static JFrame f = new JFrame("Hero表格");

	static JButton bEdit = new JButton("编辑数据");
	static JButton bAdd = new JButton("增加数据");
	static JButton bDel = new JButton("删除数据");

	static JButton bFirstPage = new JButton("首页");
	static JButton bPreviousPage = new JButton("上一页");
	static JButton bNextPage = new JButton("下一页");
	static JButton bLastPage = new JButton("末页");
	static JComboBox<Object> cb = new JComboBox<Object>();
	public static boolean cbListenerEnabled = true;

	static JLabel l = new JLabel();

	public static void isEmpty(JTextField tf, String msg) {
		if (!ok)
			return;
		if (0 == tf.getText().length()) {
			JOptionPane.showMessageDialog(f, msg + "不能为空,请确认!");
			ok = false;
		}
	}

	public static void isNumber(JTextField tf, String msg) {
		if (!ok)
			return;
		try {
			Double.parseDouble(tf.getText());
		} catch (NumberFormatException e) {
			JOptionPane.showMessageDialog(f, msg + "必须是数字,请确认!");
			ok = false;
		}
	}

	public static void isInt(JTextField tf, String msg) {
		if (!ok)
			return;
		try {
			Integer.parseInt(tf.getText());
		} catch (NumberFormatException e) {
			JOptionPane.showMessageDialog(f, msg + "必须是整数,请确认!");
			ok = false;
		}
	}

	public static void updateButtonStatus(int currentPage, int lastPage) {
		bDel.setEnabled(true);
		bFirstPage.setEnabled(true);
		bPreviousPage.setEnabled(true);
		bNextPage.setEnabled(true);
		bLastPage.setEnabled(true);

		if (new HeroDAO().list().size() == 0)
			bDel.setEnabled(false);

		if (currentPage == 1 || lastPage == 0) {
			bFirstPage.setEnabled(false);
			bPreviousPage.setEnabled(false);
		}
		if (currentPage == lastPage || lastPage == 0) {
			bNextPage.setEnabled(false);
			bLastPage.setEnabled(false);
		}

		String str = String.format("当前是第%d页,共%d页", currentPage, lastPage);
		l.setText(str);

		// 因为cb在执行.removeAllItems()等方法时会触发监听器,所以需得先令监听器赞不做出反应才可以执行这些方法
		// 否则就形成了递归逻辑,会出错
		cbListenerEnabled = false;
		if (cb.getItemCount() != 0)
			cb.removeAllItems();
		for (int i = 0; i < lastPage; i++)
			cb.addItem(i + 1);
		// 令cb选定某个页面
		cb.setSelectedItem(currentPage);
		cbListenerEnabled = true;
	}

	public static void main(String[] args) {
		f.setSize(800, 600);
		f.setLocation(300, 300);
		f.setLayout(null);

		HeroTableModel htm = new HeroTableModel();
		currentPage = 1;
		HeroDAO hd = new HeroDAO();
		// HeroDAO的list方法右边的参数是count,即从左边参数(起点下标)开始总共有多少项数据;
		// 即使起始加上count大于size也没关系,会自动列到最后一项数据为止
		htm.heros = hd.list(currentPage * 10 - 10, 10);
		if (hd.list().size() > 10) {
			if (hd.list().size() % 10 == 0)
				lastPage = hd.list().size() / 10;
			else
				lastPage = hd.list().size() / 10 + 1;
		} else
			lastPage = 1;
		// 初始化时根据生成的lastPage和当前页更新页面按钮状态
		updateButtonStatus(currentPage, lastPage);

		JTable t = new JTable(htm);
		t.getSelectionModel().setSelectionInterval(0, 0);

		JScrollPane sp = new JScrollPane(t);
		sp.setBounds(0, 0, 780, 300);

		// 增加数据编辑页面的模态窗口
		JDialog dAdd = new JDialog(f);
		dAdd.setModal(true);
		dAdd.setTitle("新增数据编辑");
		dAdd.setSize(400, 350);
		dAdd.setLocation(400, 400);
		dAdd.setResizable(false);
		dAdd.setLayout(null);

		JPanel p1 = new JPanel();
		p1.setBounds(20, 50, 340, 50);
		p1.setLayout(new FlowLayout());
		JLabel l1 = new JLabel("名称:");
		l1.setPreferredSize(new Dimension(120, 30));
		JTextField tf1 = new JTextField();
		tf1.setPreferredSize(new Dimension(150, 30));
		p1.add(l1);
		p1.add(tf1);

		JPanel p2 = new JPanel();
		p2.setBounds(20, 120, 340, 50);
		p2.setLayout(new FlowLayout());
		JLabel l2 = new JLabel("血量(数字):");
		l2.setPreferredSize(new Dimension(120, 30));
		JTextField tf2 = new JTextField();
		tf2.setPreferredSize(new Dimension(150, 30));
		p2.add(l2);
		p2.add(tf2);

		JPanel p3 = new JPanel();
		p3.setBounds(20, 190, 340, 50);
		p3.setLayout(new FlowLayout());
		JLabel l3 = new JLabel("伤害(整数):");
		l3.setPreferredSize(new Dimension(120, 30));
		JTextField tf3 = new JTextField();
		tf3.setPreferredSize(new Dimension(150, 30));
		p3.add(l3);
		p3.add(tf3);

		JButton b1 = new JButton("提交");
		b1.setBounds(150, 250, 80, 50);
		b1.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				isEmpty(tf1, "名称");
				isEmpty(tf2, "血量");
				isNumber(tf2, "血量");
				isEmpty(tf3, "伤害");
				isInt(tf3, "伤害");

				if (ok) {
					HeroDAO hd = new HeroDAO();
					Hero h = new Hero();
					h.name = tf1.getText();
					h.hp = (float) Double.parseDouble(tf2.getText());
					h.damage = Integer.parseInt(tf3.getText());
					hd.add(h);
					if (hd.list().size() % 10 == 0)
						lastPage = hd.list().size() / 10;
					else
						lastPage = hd.list().size() / 10 + 1;
					htm.heros = hd.list(currentPage * 10 - 10, 10);
					t.updateUI();
					updateButtonStatus(currentPage, lastPage);
					JOptionPane.showMessageDialog(f, "提交成功");
				}
				ok = true;
			}
		});

		dAdd.add(p1);
		dAdd.add(p2);
		dAdd.add(p3);
		dAdd.add(b1);

		// 主页面删除数据页面的入口按钮
		bAdd.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				tf1.setText(null);
				tf2.setText(null);
				tf3.setText(null);
				dAdd.setVisible(true);
			}
		});

		// 删除数据的按钮
		bDel.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// 返回选中的所有行
				int[] rows = t.getSelectedRows();
				// 返回选中的开头一行
				// int row = t.getSelectedRow();
				if (rows.length == 0) {
					JOptionPane.showMessageDialog(f, "未选中任何数据!");
					return;
				}
				int option = JOptionPane.showConfirmDialog(f, "是否删除选中数据 ?");
				if (JOptionPane.OK_OPTION == option) {
					HeroDAO hd = new HeroDAO();
					for (int i = 0; i < rows.length; i++) {
						Hero h = htm.heros.get(rows[i]);
						hd.delete(h.id);
					}
					t.getSelectionModel().setSelectionInterval(0, 0);

					if (hd.list().size() % 10 == 0) {
						// size是10的倍数且当前页即末页说明末页内容删光了,需跳转显示上一页的内容
						if (currentPage == lastPage)
							currentPage--;
						lastPage = hd.list().size() / 10;
					} else
						lastPage = hd.list().size() / 10 + 1;
					htm.heros = hd.list(currentPage * 10 - 10, 10);
					t.updateUI();
					updateButtonStatus(currentPage, lastPage);
					JOptionPane.showMessageDialog(f, "已删除选中数据!");
				}
			}
		});

		// 数据编辑模态窗口
		JDialog dEdit = new JDialog(f);
		dAdd.setModal(true);
		dEdit.setTitle("数据修改");
		dEdit.setSize(400, 350);
		dEdit.setLocation(400, 400);
		dEdit.setResizable(false);
		dEdit.setLayout(null);

		JPanel p4 = new JPanel();
		p4.setBounds(20, 50, 340, 50);
		p4.setLayout(new FlowLayout());
		JLabel l4 = new JLabel("名称:");
		l4.setPreferredSize(new Dimension(120, 30));
		JTextField tf4 = new JTextField();
		tf4.setPreferredSize(new Dimension(150, 30));
		p4.add(l4);
		p4.add(tf4);

		JPanel p5 = new JPanel();
		p5.setBounds(20, 120, 340, 50);
		p5.setLayout(new FlowLayout());
		JLabel l5 = new JLabel("血量(数字):");
		l5.setPreferredSize(new Dimension(120, 30));
		JTextField tf5 = new JTextField();
		tf5.setPreferredSize(new Dimension(150, 30));
		p5.add(l5);
		p5.add(tf5);

		JPanel p6 = new JPanel();
		p6.setBounds(20, 190, 340, 50);
		p6.setLayout(new FlowLayout());
		JLabel l6 = new JLabel("伤害(整数):");
		l6.setPreferredSize(new Dimension(120, 30));
		JTextField tf6 = new JTextField();
		tf6.setPreferredSize(new Dimension(150, 30));
		p6.add(l6);
		p6.add(tf6);

		JButton b2 = new JButton("提交");
		b2.setBounds(150, 250, 80, 50);
		b2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				isEmpty(tf4, "名称");
				isEmpty(tf5, "血量");
				isNumber(tf5, "血量");
				isEmpty(tf6, "伤害");
				isInt(tf6, "伤害");

				if (ok) {
					int row = t.getSelectedRow();
					if (row == -1) {
						JOptionPane.showMessageDialog(f, "未选中任何数据!");
						return;
					}
					int option = JOptionPane.showConfirmDialog(f, "是否修改选中数据 ?");
					if (JOptionPane.OK_OPTION == option) {
						Hero h = new Hero();
						h.id = htm.heros.get(row).id;
						h.name = tf4.getText();
						h.hp = (float) Double.parseDouble(tf5.getText());
						h.damage = Integer.parseInt(tf6.getText());

						HeroDAO hd = new HeroDAO();
						hd.update(h);

						htm.heros = hd.list();
						t.updateUI();
						JOptionPane.showMessageDialog(f, "已修改选中数据!");
						dEdit.setVisible(false);
					}
				}
				ok = true;
			}
		});

		dEdit.add(p4);
		dEdit.add(p5);
		dEdit.add(p6);
		dEdit.add(b2);

		// 主页面编辑数据页面的入口按钮
		bEdit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				tf4.setText(null);
				tf5.setText(null);
				tf6.setText(null);
				dEdit.setVisible(true);
			}
		});

		// 增加、删除、编辑按钮的整合面板
		JPanel pControl = new JPanel();
		pControl.setBounds(0, 350, 780, 60);
		pControl.setLayout(new FlowLayout());
		pControl.add(bAdd);
		pControl.add(bDel);
		pControl.add(bEdit);

		// 页面按钮组件添加监听器
		bFirstPage.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				currentPage = 1;
				htm.heros = hd.list(currentPage * 10 - 10, 10);
				t.updateUI();
				updateButtonStatus(currentPage, lastPage);
			}
		});

		bPreviousPage.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				currentPage--;
				htm.heros = hd.list(currentPage * 10 - 10, 10);
				t.updateUI();
				updateButtonStatus(currentPage, lastPage);
			}
		});

		bNextPage.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				currentPage++;
				htm.heros = hd.list(currentPage * 10 - 10, 10);
				t.updateUI();
				updateButtonStatus(currentPage, lastPage);
			}
		});

		bLastPage.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				currentPage = lastPage;
				htm.heros = hd.list(currentPage * 10 - 10, 10);
				t.updateUI();
				updateButtonStatus(currentPage, lastPage);
			}
		});

		cb.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// 为避免在updateButtonStatus时因会触发cb的监听器而导致递归死循环,在updateButtonStatus令监听器不做反应
				if (!cbListenerEnabled)
					return;
				currentPage = (int) cb.getSelectedItem();
				System.out.println(currentPage);
				htm.heros = hd.list(currentPage * 10 - 10, 10);
				t.updateUI();
				updateButtonStatus(currentPage, lastPage);
			}
		});

		// 页面按钮整合面板
		JPanel pPage = new JPanel();
		pPage.setBounds(0, 430, 780, 60);
		pPage.setLayout(new FlowLayout());
		pPage.add(bFirstPage);
		pPage.add(bPreviousPage);
		pPage.add(cb);
		pPage.add(bNextPage);
		pPage.add(bLastPage);

		String str = String.format("当前是第%d页,共%d页", currentPage, lastPage);
		l.setText(str);
		l.setBounds(320, 500, 160, 50);

		f.add(sp);
		f.add(pControl);
		f.add(pPage);
		f.add(l);

		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);

	}
}

							





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





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

上传截图