Java+Swing+Mysql学生成绩管理系统【DAY 8】JTable的简单使用

  • 3.代码实现

1.问题引入

=====================================================================

  1. JTable中有哪些方法

  2. 如何存放表头

  3. 如何存放表格体(数据)

  4. 如何设置表头/表格体的属性(颜色、大小、字体)

  5. 如何设置字体居中显示

  6. 如何使表格不可被编辑

2.界面展示

=====================================================================

![image-20211114111912875](https://img-blog.csdnimg.cn/img_con

本文已被开源项目:【一线大厂面试真题解析+核心总结学习笔记+最新全套讲解视频+实战项目源码讲义】收录

vert/18e424e3a9718a1525bfda77e8661243.png)

3.代码实现

=====================================================================


package com.test;



import javax.swing.*;

import javax.swing.table.*;

import java.awt.*;

import java.util.Vector;



public class TableTest extends JFrame {



    public TableTest() {

        super("测试jTable");



//        //定义属性列(表头)

//        Vector<String> columns=new Vector<>();

//        columns.addElement("编号");

//        columns.addElement("姓名");

//        columns.addElement("学号");

//        columns.addElement("家乡");



        //定义一个二维数组作为表格体,存放数据

        Vector<Vector<Object>> data = new Vector<>();

        Vector<Object> rowVector1 = new Vector<>();

        rowVector1.addElement("1");

        rowVector1.addElement("张三");

        rowVector1.addElement("1");

        rowVector1.addElement("湖南");



        Vector<Object> rowVector2 = new Vector<>();

        rowVector2.addElement("2");

        rowVector2.addElement("李四");

        rowVector2.addElement("2");

        rowVector2.addElement("北京");



        Vector<Object> rowVector3 = new Vector<>();

        rowVector3.addElement("3");

        rowVector3.addElement("王五");

        rowVector3.addElement("3");

        rowVector3.addElement("上海");



        data.addElement(rowVector1);

        data.addElement(rowVector2);

        data.addElement(rowVector3);



        //tableModel:和jTable关联后只需要更新model就能把数据的变化反应到jTable中

//        DefaultTableModel tableModel=new DefaultTableModel();

//        tableModel.setDataVector(data,columns);//将数据和属性列放到tableModel中

        //有了自定义的StudentTableModel,而且再其中封装表头信息

        StudentTableModel studentTableModel = StudentTableModel.assembleModel(data);

        //jTable和model关联

        JTable jTable = new JTable(studentTableModel);

        //设置表头的属性(字体,颜色)

        JTableHeader tableHeader = jTable.getTableHeader();

        tableHeader.setFont(new Font(null, Font.BOLD, 16));

        tableHeader.setBackground(Color.pink);

        //设置表格体

        jTable.setFont(new Font(null, Font.PLAIN, 14));

        jTable.setBackground(Color.WHITE);

        jTable.setGridColor(Color.BLACK);//设置表格分割线为纯黑色

        jTable.setRowHeight(30);//设置行高

        //设置是否可以多行选择(默认就是多行选择)

        jTable.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);



        //设置每一列的渲染方式

        Vector<String> columns=StudentTableModel.getColumns();//获取每一列

        StudentCellRender render =new StudentCellRender();//设置渲染方式

        for(int i=0;i<columns.size();i++){

            TableColumn column=jTable.getColumn(columns.get(i));

            column.setCellRenderer(render);

            if(i==0){//设置第一列的宽度

                column.setPreferredWidth(30);

                column.setResizable(false);//设置第一列的宽度不可改变

            }

        }



        Container contentPane = getContentPane();

        /*如果直接把jTable加到contentPane内容面板上,将不会显示属性列(表头)

        应该先加到加到JScrollPane上再加到面板上

        JTable通常置于一个内部JScrollPane 。

         */

        JScrollPane jScrollPane = new JScrollPane(jTable);//

        contentPane.add(jScrollPane);



        setSize(600, 400);

        setLocationRelativeTo(null);

        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setVisible(true);

    }



    public static void main(String[] main) {

        new TableTest();

    }

}



/*

为了设置表格体中的数据居中且增加渲染方式,重写getListCellRendererComponent方法

 */

class StudentCellRender extends DefaultTableCellRenderer{

    //在每一行的每一列显示之前都会调用

    //隔行变色

    @Override

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {

        if (row % 2 == 0) {

            setBackground(Color.gray);

        }else{


### 最后

**面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典**

*   Java核心知识整理

![2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多](https://img-blog.csdnimg.cn/img_convert/6977dbab65e125e665bd5d29407178eb.webp?x-oss-process=image/format,png)

Java核心知识

*   Spring全家桶(实战系列)

![2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多](https://img-blog.csdnimg.cn/img_convert/7341c350a067a21edf92292836ef4bdb.webp?x-oss-process=image/format,png)

*   其他电子书资料

![2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多](https://img-blog.csdnimg.cn/img_convert/7846e9aea645ac5bdf5dd15f5b1ecf9d.webp?x-oss-process=image/format,png)

**Step3:刷题**

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

**以下是我私藏的面试题库:**

![2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多](https://img-blog.csdnimg.cn/img_convert/a3ca2667a500176ede7739be602721c4.webp?x-oss-process=image/format,png)



...(img-yPVkmpBV-1723369204665)]

*   其他电子书资料

[外链图片转存中...(img-uVpcAgTM-1723369204665)]

**Step3:刷题**

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

**以下是我私藏的面试题库:**

[外链图片转存中...(img-FGMPKf68-1723369204666)]



> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)收录**
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值