一、主要效果

二、代码

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.MessageFormat;
import java.util.Random;

/**
 * 设置图形化表格
 *
 * 无法设置表格的居中对齐。
 *
 * 表格怎么合并单元格?
 * 怎么显示一些其他组件?
 */
public class JTableTest extends JFrame {

    // 默认表格模型
    private DefaultTableModel model = null;

    private JTable table = null;

    private JButton addBtn = null;

    public JTableTest() {

        super("TableDemo");
        String[][] datas = {{"小明","男"},{"小芳","女"},{"小王","男"}};
        String[] titles = {"名称", "性别"};

        // 1、初始化数据模型,数据,标题
        // 第一个参数是数据数组,第二个参数是标题对象数组。
        model = new DefaultTableModel(datas, titles);

        // 2、初始化JTable对象,用DefaultTableModel的对象
        table = new JTable(model);

        // 设置表格的行外间距
        table.setRowMargin(10);

        // 设置行的高度
        table.setRowHeight(25);

        addBtn = new JButton("添加数据");
        addBtn.setToolTipText("添加数据");

        // 设置大小没有用处
        addBtn.setPreferredSize(new Dimension(20, 25));
        addBtn.setSize(new Dimension(20, 25));


        addBtn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // 点击按钮就添加一行
                model.addRow(new String[]{getRandomName(), getRandomSex()});
            }
        });


        // 设置边框布局
        setLayout(new BorderLayout());

        add(new JPanel().add(addBtn), BorderLayout.NORTH);

        // 用一个JScrollPane来装载JTable对象,用于内容溢出的时候可以滑动显示
        add(new JScrollPane(table), BorderLayout.CENTER);

        setSize(400, 300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    private String getRandomName() {
        String source = "王陈李张刘孙章胡赵吴邱颜杨唐何柳肖廖";
        int len = source.length();
        Random random = new Random(System.currentTimeMillis());
        return MessageFormat.format("小{0}", source.charAt(random.nextInt(len)));
    }

    private String getRandomSex() {
        String source = "男女";
        int len = source.length();
        Random random = new Random(System.currentTimeMillis());
        return MessageFormat.format("{0}", source.charAt(random.nextInt(len)));
    }

    public static void main(String[] args) {

        JTableTest test = new JTableTest();
    }
}

三、主要缺点

 1、无法设置居中。

 2、无法在内部添加JTextField和JCheckBox对象。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐