学校的实验指导书的实现


1、运用表格模型创建如图所示的界面,为表格添加按钮事件:

(1)点击“插入”,取文本框中的数据插入表格的第一行;

(2)点击“添加”,取文本框的数据加到表格的最后一行;

(3)点击“删除”,删除当前选中的一行数据;

(4)点击“修改”,根据文本框数据更新表格数据。

 

        结果图:

java jtable 列值 java的jtable_java


 

先了解一下JTable和DefaultTableModel

JTable表格的实现。JTable 是用来显示和编辑常规二维单元表。 可以用数组或者集合来存储临时的信息。模拟数据库。

java jtable 列值 java的jtable_java jtable 列值_02

 

DefaultTableModel是AbstractTableModel的子类 是表格模型

java jtable 列值 java的jtable_java jtable 列值_03


话不多说  直接上代码 

package Labbook08_3;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class TableGUI  {

    //这一块是JFrame北部的部分
    //信息的输入
    JLabel number = new JLabel("班级:");
    JTextField numtext = new JTextField(5);
    JLabel stuid = new JLabel("学号:");
    JTextField stuidtext = new JTextField(5);
    JLabel name = new JLabel("姓名:");
    JTextField nametext = new JTextField(5);
    JLabel phone = new JLabel("电话:");
    JTextField phonetext = new JTextField(11);

    //下部的按钮
    Button btchange = new Button("修改");
    Button btadd = new Button("添加");
    Button btdelete = new Button("删除");
    Button btaddline = new Button("插入");


    public void puttogether(){
        JFrame jf = new JFrame("表格");

        JPanel jp = new JPanel();
        jp.add(number);
        jp.add(numtext);
        jp.add(stuid);
        jp.add(stuidtext);
        jp.add(name);
        jp.add(nametext);
        jp.add(phone);
        jp.add(phonetext);

        jf.add(jp, BorderLayout.NORTH);

            //这一块是中间的表格
                        //列名
                        String[] tableTitle = {"班级","姓名","学号","电话"};
                        //数据
                    String [][]tableDate={
                                {"310201","朱溧1","2020130401","18652606256"},
                                {"310202","朱溧2","2020130402","18652606256"},
                                {"310203","朱溧3","2020130403","18652606256"}};

                        
                    DefaultTableModel dtm = new DefaultTableModel(tableDate,tableTitle);

                    JTable table_want = new JTable(dtm);




        //支持滚动
                        JScrollPane jsp = new JScrollPane(table_want);
                        jf.add(jsp,BorderLayout.CENTER);

            //这一块是南边的按钮区域


                        JPanel jp2 = new JPanel();
                        jp2.add(btchange);
                        jp2.add(btadd);
                        jp2.add(btdelete);
                        jp2.add(btaddline);
                        jf.add(jp2,BorderLayout.SOUTH);

        //避免出现窗口运行后需要拉一下窗口才显示  把JFrame的设置最后放
        jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        jf.setBounds(500,500,600,500);
        jf.setVisible(true);

            //进行事件监听器的部分
        //执行增加操作
        btadd.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String numtextText = numtext.getText();
                String stuidtextText = stuidtext.getText();
                String nametextText = nametext.getText();
                String phonetextText = phonetext.getText();
                String []newrow = {numtextText,stuidtextText,nametextText,phonetextText};
                dtm.addRow(newrow);
                clearthing();

            }
        });

        //执行删除操作
        btdelete.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int selectedRow = table_want.getSelectedRow();

                dtm.removeRow(selectedRow);
                String []newrow = {"","","",""};
                dtm.addRow(newrow);
                clearthing();

            }
        });

        //执行插入操作
        btaddline.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //行数和列数  从0开始

                //获取信息
                String numtextText = numtext.getText();
                String stuidtextText = stuidtext.getText();
                String nametextText = nametext.getText();
                String phonetextText = phonetext.getText();
                String []newrow = {numtextText,stuidtextText,nametextText,phonetextText};
                dtm.insertRow(0,newrow);
                clearthing();

            }
        });

        //执行修改操作
        btchange.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                /*首先是单元格被锁住无法修改
                * 如果没有锁住  则双击单元格就可以进行修改
                *
                * 思路:
                * 选中哪行 先删除 再插入*/
                //获取信息
                String numtextText = numtext.getText();
                String stuidtextText = stuidtext.getText();
                String nametextText = nametext.getText();
                String phonetextText = phonetext.getText();
                String []newrow = {numtextText,stuidtextText,nametextText,phonetextText};
                //得到了选中的行
                int selectedRow = table_want.getSelectedRow();
                //删除选中的行
                dtm.removeRow(selectedRow);
                dtm.insertRow(selectedRow,newrow);
                clearthing();



            }
        });


    }

    //这个方法是用来清除掉输入框里的文本
    void clearthing(){
        numtext.setText("");
        nametext.setText("");
        stuidtext.setText("");
        phonetext.setText("");

    }



    public static void main(String[] args) {

        new TableGUI().puttogether();

    }
}


总结

我在表格里 没有设置单元格锁定  所以双击单元格是可以直接在单元格里进行修改

获取信息的方法我没有进行单独封装  是为了方便我都写在了一个类里 (不推荐)

事件处理我也是直接就写了(不推荐)

常见的一些方法在代码里已经写了  如果还有其他的需要可以去API里进行查询

如果有啥想问的可以留言 一起讨论