1.概述
JTable,表格。JTable 是用来显示和编辑常规二维单元表。
2.JTable常用构造方法
4.1 创建空表格,后续再添加相应数据
JTable()
4.2 创建指定行列数的空表格,表头名称默认使用大写字母(A, B, C ...)依次表示
JTable(int numRows, int numColumns)
4.3 创建表格,指定 表格行数据 和 表头名称
JTable(Object[][] rowData, Object[] columnNames)
4.4 使用表格模型创建表格
JTable(TableModel dm)
3.添加表格到容器中有两种方式:
①添加到普通的中间容器中
②添加到JScrollPane滚动容器中
表格模型(TableModel)
概述:
TableModel 接口指定了 JTable 用于询问表格式数据模型的方法。TableModel 封装了表格中的各种数据,为表格显示提供数据。上面案例中直接使用行数据和表头创建表格,实际上JTable 内部自动将传入的行数据和表头封装成了 TableModel。只要数据模型实现了 TableModel 接口,就可以通过以下两行代码设置 JTable 显示该模型:
TableModel myData = new MyTableModel();
JTable table = new JTable(myData);
表格中的一些方法
/** 返回总行数 */
public int getRowCount();
/** 返回总列数 */
public int getColumnCount();
/** 返回指定列的名称(表头名称) */
public String getColumnName(int columnIndex);
/** 针对列中所有的单元格值,返回最具体的超类。JTable 使用此方法来设置列的默认渲染器和编辑器。 */
public Class<?> getColumnClass(int columnIndex);
/** 判断指定单元格是否可编辑 */
public boolean isCellEditable(int rowIndex, int columnIndex);
/** 获取指定单元格的值 */
public Object getValueAt(int rowIndex, int columnIndex);
/** 设置指定单元格的值 */
public void setValueAt(Object aValue, int rowIndex, int columnIndex);
/** 添加表格模型监听器 */
public void addTableModelListener(TableModelListener l);
/** 移除表格模型监听器 */
public void removeTableModelListener(TableModelListener l);
swing的表格实现
1.表哥对象:JTable对象 模式对象DefaultTableModel用于创键表头 就是属性
2.表格实现流程
2.表格实现流程
(1)实例化一个表格对象
(2)swing中需要提供表格模式(创建一个表格模式对象)
(3)将所创建表格的模式对象设置到表格对象中
(4)利用模式对象设置表头(表格标题栏)
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class JTableDemo extends JFrame{
//1.实例化一个表格对象
private JTable jta = new JTable();
//2.swing中需要提供表格模式(创建一个表格模式对象)
private DefaultTableModel dtm = new DefaultTableModel();
将实例化表格添加到滚动面板中间组件中
private JScrollPane jsp = new JScrollPane(jta);
public JTableDemo() {
this.setTitle("");
this.setSize(400, 300);
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
//3.将所创建表格的模式对象设置到表格对象中
jta.setModel(dtm);
//4.利用模式对象设置表头(表格标题栏)
dtm.addColumn("编号");
dtm.addColumn("姓名");
dtm.addColumn("性别");
//模拟加载数据
//1.利用Object[]数组的方式
Object[] objs = {1,"张三的魂","男"};
dtm.addRow(objs);
//2.利用Vector集合框架的方式
Vector<Object> vc = new Vector<Object>();
vc.add(2);
vc.add("黄黄");
vc.add("女");
dtm.addRow(vc);
this.getContentPane().add(jsp);
this.setVisible(true);
}
public static void main(String[] args) {
new JTableDemo();
}
}
连接数据库实现模糊查询 !!!
加载数据库DBHelper 需要查我初识DAO
/**
* 模糊查询
* @return
*/
public List<Book> bookAll(String mh,String mu) {
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
int n=0;
String sql=null;
List <Book> list=new ArrayList<Book>();
try {
conn=DBHelper.getconn();
sql="select * from tb_book where "+mh+" like '%"+mu+"%'";
ps=conn.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next()) {
Book book=new Book(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5), rs.getString(6), rs.getDouble(7), rs.getString(8));
list.add(book);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myclose(conn, ps, rs);
}
return list;
}
制作好这几步骤后 就可以自作查询了!
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import com.zking.stumanager.dao.StudentDao;
import com.zking.stumanager.entity.Student;
/**
* 案例:利用JTable表格对象装载数据 进行显示以及模糊查询
*
*/
public class MainPageUI extends JFrame {
/**
* 1.创建所有的中间组件及基础组件
*/
// 上
private JPanel jpa = new JPanel();// 中间组件
private JComboBox<String> jcba = new JComboBox<String>();// 下拉框
private JTextField jtfa = new JTextField(15);// 输入框
private JButton jba = new JButton("搜索");
// 中
// 1创建表格的模式对象
private DefaultTableModel dtm = new DefaultTableModel();
// 2将创建好的表格的模式对象添加到表格对象中(通过构造函数的方式)
private JTable jta = new JTable(dtm);
// 3.将表格存放到滚动面板中
private JScrollPane jsp = new JScrollPane(jta);
// 下
private JPanel jpb = new JPanel();// 中间组件
private JButton jbb = new JButton("新增");
private JButton jbc = new JButton("删除");
private JButton jbd = new JButton("修改");
private JButton jbe = new JButton("查看详情");
private JButton jbf = new JButton("手动刷新");
private JButton jbg = new JButton("修改密码");
private JButton jbh = new JButton("退出程序");
/**
* 方法功能:将基础组件添加到中间组件内
*
*/
public void addControl() {
// 上
jcba.addItem("姓名");
jcba.addItem("地址");
jpa.add(jcba);
jpa.add(jtfa);
jpa.add(jba);
// 中
// 设置表格的表头
dtm.addColumn("学号");
dtm.addColumn("姓名");
dtm.addColumn("年龄");
dtm.addColumn("性别");
dtm.addColumn("地址");
// -------------------主界面数据绑定位置START---------------------------
// 1.实例化StudentDao类对象
StudentDao sd = new StudentDao();
// 2.调用查询所有的方法
List<Student> listStudents = sd.queryStudentAll();
//重新显示数据前将上一次显示的数据全部清空
//1.获取表格中数据的所有行
int rowCount = jta.getRowCount();//12
//2.根据获取的行数 删除行 dtm.removeRow(0)
for (int i = 0; i < rowCount; i++) {
dtm.removeRow(0);
}
// 3.遍历集合
for (Student student : listStudents) {
Vector<Object> vc = new Vector<Object>();
vc.add(student.getSid());
vc.add(student.getSname());
vc.add(student.getSage());
vc.add(student.getSex());
vc.add(student.getSaddress());
dtm.addRow(vc);
// (1)Object数组
// Object[] objs = {
// student.getSid(),
// student.getSname(),
// student.getSage(),
// student.getSex(),
// student.getSaddress()
// };
// dtm.addRow(objs);
// System.out.println(student);
// 将每个学生的信息一次添加到表格的行中
// dtm.addRow(student);
}
// -------------------主界面数据绑定位置END---------------------------
// 下
jpb.add(jbb);
jpb.add(jbc);
jpb.add(jbd);
jpb.add(jbe);
jpb.add(jbf);
jpb.add(jbg);
jpb.add(jbh);
}
public MainPageUI() {
this.setTitle("");
this.setSize(700, 500);
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
addControl();
// 3.将中间组件添加到窗体容器中的指定位置
// 上
this.getContentPane().add(jpa, "North");
// 中
this.getContentPane().add(jsp, "Center");
// 下
this.getContentPane().add(jpb, "South");
/**
* 模糊查询
* 1.给搜索按钮设置点击事件
* 2.获取下拉框选中的模糊查询的字段,以及获取输入框中的值
* 3.调用模糊查询的方法将获取的值传入进去
* 4.返回一个集合对象依次将集合对象中的每一行记录添加到表格的行中
* 注意:添加进去前需要将上一次的数据显示全部清空即可。
*/
//1.给搜索按钮设置点击事件
jba.addActionListener(new ActionListener() {
@Override
//模糊查询
public void actionPerformed(ActionEvent e) {
//重新显示数据前将上一次显示的数据全部清空
//1.获取表格中数据的所有行
int rowCount = jta.getRowCount();//12
//2.根据获取的行数 删除行 dtm.removeRow(0)
for (int i = 0; i < rowCount; i++) {
dtm.removeRow(0);
}
//sql
//select * from tb_student where "+colName+" like '%关键词%';
// select * from tb_student where "+colName+" like '%关键词%';
//2.获取下拉框选中的模糊查询的字段,以及获取输入框中的值
String colName = jcba.getSelectedItem().toString();
if("地址".equals(colName)) {
colName = "saddress";
}else if("姓名".equals(colName)) {
colName = "sname";
}
System.out.println(colName);
String strName = jtfa.getText();
//3.调用模糊查询的方法将获取的值传入进去
StudentDao sd = new StudentDao();
List<Student> queryStudentAll = sd.queryStudentAll(colName, strName);
for (Student student : queryStudentAll) {
dtm.addRow(new Object[] {
student.getSid(),
student.getSname(),
student.getSage(),
student.getSex(),
student.getSaddress()
});
}
}
});
this.setVisible(true);
}
public static void main(String[] args) {
new MainPageUI();
}
}
动态时间!!!!!
package test;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import javax.swing.JFrame;
import javax.swing.JTextField;
//无中间组件 演示效果
public class TestIFrame extends JFrame {
private JTextField time= new JTextField();;//文本框输入框!
SimpleDateFormat myfmt = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
public TestIFrame(){
super();
// setSize(200, 100);
setBounds(100, 100, 200, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
// time = new JTextField();
this.add(time,BorderLayout.CENTER);
time.addActionListener(new TimeAct());
setVisible(true);
}
class TimeAct implements ActionListener{
//每秒更新一次时间
public TimeAct() {
//Timer定时器
javax.swing.Timer t=new javax.swing.Timer(1000,this);
t.start();
}
@Override
public void actionPerformed(ActionEvent e) {
//myfmt.format(new java.util.Date()).toString()获取系统当前时间
time.setText(myfmt.format(new java.util.Date()).toString());
}
}