JTable表格操作

2021-12-11  本文已影响0人  开心的小哈
image.png
package com.main.list;

import javax.swing.*;

public class SimpleTable {
    public void init(){
        JFrame jf = new JFrame("简单操作");
        //创建一维数组
        Object titles[]={"姓名","年龄","性别"};
        //创建二位数组
        Object data[][]={
                {"李昭庆",29,"女"},
                {"苏格拉里",56,"男"},
                {"李白",35,"女"},
                {"弄头",18,"男"},
                {"虎头",2,"女"},
        };

        JTable jTable = new JTable(data, titles);
        jf.add(new JScrollPane(jTable));
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jf.pack();
        jf.setVisible(true);

    }

    public static void main(String[] args) {
        new SimpleTable().init();
    }
}

image.png

选择调整

package com.main.list;

import javax.swing.*;
import javax.swing.table.TableColumn;

public class SimpleTable {
    public void init(){
        JFrame jf = new JFrame("简单操作");
        //创建一维数组
        Object titles[]={"姓名","年龄","性别"};
        //创建二位数组
        Object data[][]={
                {"李昭庆",29,"女"},
                {"苏格拉里",56,"男"},
                {"李白",35,"女"},
                {"弄头",18,"男"},
                {"虎头",2,"女"},
        };

        JTable jTable = new JTable(data, titles);
        //设置选择模式
//        jTable.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);//默认没有限制
//        jTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);//只能选择单个范围
        jTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);//只选择单行
        TableColumn column = jTable.getColumn(titles[0]);
        column.setMinWidth(40);
        TableColumn column2 = jTable.getColumn(titles[2]);
        column2.setMaxWidth(50);
        jf.add(new JScrollPane(jTable));
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jf.pack();
        jf.setVisible(true);

    }

    public static void main(String[] args) {
        new SimpleTable().init();
    }
}

自定义实现TableModel

package com.main.list;

import javax.swing.*;
import javax.swing.table.AbstractTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.util.Vector;

public class SimpleTable {
    Vector title = new Vector();//存储标题
    Vector <Vector> dataV = new Vector();//存储数据
    public void init() {
        JFrame jf = new JFrame("简单操作");
        //创建一维数组
        Object titles[] = {"姓名", "年龄", "性别"};
        //创建二位数组
        Object data[][] = {
                {"李昭庆", 29, "女"},
                {"苏格拉里", 56, "男"},
                {"李白", 35, "女"},
                {"弄头", 18, "男"},
                {"虎头", 2, "女"},
        };

        for (int i = 0; i < titles.length; i++) {
            title.add(titles[i]);
        }


        for (int i = 0; i < data.length; i++) {
            Vector td = new Vector();
            for (int j = 0; j < data[i].length; j++) {
                td.add(data[i][j]);
            }
            dataV.add(td);

        }
        System.out.println(dataV);
        MyTableModel myTableModel = new MyTableModel();
        JTable jTable = new JTable(myTableModel);
        JButton selectTd = new JButton("获取选中行数据");
        selectTd.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int selectedColumn = jTable.getSelectedColumn();
                int selectedRow = jTable.getSelectedRow();
                System.out.println("当前选中行"+selectedRow+"当前选中列"+selectedColumn);
                Object valueAt = myTableModel.getValueAt(selectedRow, selectedColumn);
                System.out.println("当前选中的数据是"+valueAt);
            }
        });
        jf.add(new JScrollPane(jTable));
        jf.add(selectTd, BorderLayout.SOUTH);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jf.pack();
        jf.setVisible(true);

    }
    private class MyTableModel extends AbstractTableModel{

        @Override
        public int getRowCount() {
            return dataV.size();
        }

        @Override
        public int getColumnCount() {
            return title.size();
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            return dataV.get(rowIndex).get(columnIndex);
        }

        @Override
        public String getColumnName(int column) {
            return (String) title.get(column);
        }
//是否支持编辑
        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return false;
        }
    }
    public static void main(String[] args) {
        new SimpleTable().init();
    }
}

image.png

DefaultTableModel

package com.main.list;

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

public class SimpleTable {
    Vector title = new Vector();//存储标题
    Vector <Vector> dataV = new Vector();//存储数据
    public void init() {
        JFrame jf = new JFrame("简单操作");
        //创建一维数组
        Object titles[] = {"姓名", "年龄", "性别"};
        //创建二位数组
        Object data[][] = {
                {"李昭庆", 29, "女"},
                {"苏格拉里", 56, "男"},
                {"李白", 35, "女"},
                {"弄头", 18, "男"},
                {"虎头", 2, "女"},
        };

        for (int i = 0; i < titles.length; i++) {
            title.add(titles[i]);
        }


        for (int i = 0; i < data.length; i++) {
            Vector td = new Vector();
            for (int j = 0; j < data[i].length; j++) {
                td.add(data[i][j]);
            }
            dataV.add(td);

        }
        System.out.println(dataV);

        //通过
        DefaultTableModel defaultTableModel = new DefaultTableModel(dataV, title);
        JTable jTable = new JTable(defaultTableModel);
        JButton addRow = new JButton("add Row");
        JButton addColumn = new JButton("add Column");
        JButton delete_row = new JButton("delete Row");
        addRow.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                defaultTableModel.addRow(new Object[]{"柳岩",18,"女"});
            }
        });
        addColumn.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                defaultTableModel.addColumn("职业");
            }
        });

        delete_row.addActionListener(new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int selectedRow = jTable.getSelectedRow();
                defaultTableModel.removeRow(selectedRow);
            }
        });
        JPanel jPanel = new JPanel();
        jPanel.add(addRow);
        jPanel.add(addColumn);
        jPanel.add(delete_row);

        jf.add(new JScrollPane(jTable));
        jf.add(jPanel, BorderLayout.SOUTH);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jf.pack();
        jf.setVisible(true);

    }


    public static void main(String[] args) {
        new SimpleTable().init();
    }
}

image.png
上一篇下一篇

猜你喜欢

热点阅读