步骤 2 : 答案-增加 步骤 3 : 练习-删除 步骤 4 : 答案-删除 步骤 5 : 练习-编辑 步骤 6 : 答案-编辑 步骤 7 : 练习-修改 步骤 8 : 答案-修改 步骤 9 : 练习-使用按钮分页 步骤 10 : 答案-使用按钮分页 步骤 11 : 练习-使用下拉框分页 步骤 12 : 答案-使用下拉框分页
点击增加按钮,出现一个JDialog,在JDialog中进行增加
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
6分27秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器
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;
}
}
提供一个删除按钮,点击删除按钮之后,删除选中的行,并且刷新table中的数据,然后再默认选中第一行。
如果点击删除的时候,没有任何行被选中,则提示“删除前应该选中一行”
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
5分13秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 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;
}
}
提供一个编辑按钮,点击的时候,弹出一个JDialog,显示选中的数据,并且能够修改。
如果点击的时候,没有选中任意一行,则提示 "编辑前请选中一行数据"
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
4分23秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 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);
}
}
}
接着练习-编辑继续完整修改的功能。 点击修改,首选判断数据是否正确,是否为空,是否为数字等。 通过校验后,把数据保存到数据库,然后刷新table中的数据,并且选中第一条。
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
4分5秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 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();
}
}
}
});
}
}
}
在table中仅仅显示10条数据。
在下方出现4个按钮 首页 上一页 下一页 末页 最后一页 最后一页需要注意,如果数据库中的总数能够整除10,那么最后一页就显示10个,否则就显示不到除以10的余数。 比如一共是25个,那么最后一页就显示5个。 按钮的状态要求: 如果有下一页的数据,才能点击下一页,否则下一页按钮是不可用的。 通过如下代码设置代码不可用 JButton.setEnable(false) 对首页,上一页和末页也是一样。
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
17分23秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 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;
}
}
借助下拉框实现下拉框分页
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
18分14秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 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公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2024-07-17
综合练习
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2023-09-05
综合练习,完整代码
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2022-05-27
JAVA 中级-图形界面-表格综合练习 ——最后两个练习,下拉框反而是最好做的
2022-04-12
能否使用这个分页组件做个jtable分页的使用教程呢?
2022-01-04
练习 - 表格综合练习组合版
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 15 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|