面向对象程序设计实验 如何使用JTable来展示数据

目录

1.绘制出带滚动条的JTable表格并填充数据

2.创建一个JPanel用来显示在表格中选中的数据

3.使在选中的表格中的一行下添加新的一行

4.Java代码部分

5.Github仓库地址


1.绘制出带滚动条的JTable表格并填充数据

2.创建一个JPanel用来显示在表格中选中的数据

3.使在选中的表格中的一行下添加新的一行

 

4.Java代码部分

Main.java

package cn.sk8diao;

/**
 * 作者: 刁旺睿
 * 时间: 2022/12/6 14:45
 */
public class Main {
    public static void main(String[] args) {
        Frame frame = new Frame();
    }
}

Frame.java

package cn.sk8diao;

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;

/**
 * 作者: 刁旺睿
 * 时间: 2022/12/6 14:45
 */
public class Frame extends JFrame {

    private final String[] columnNames = {"头像", "名字", "被动技能", "定位", "胜率"};
    private Object[][] rowData = {
            {new ImageIcon("src/images/Kayle.png"), "正义天使 凯尔", "登神长阶", "战士 辅助", "47.42%"},
            {new ImageIcon("src/images/Veigar.png"), "邪恶小法师 维迦", "超凡邪力", "法师", "48.07%"},
            {new ImageIcon("src/images/Seraphine.png"), "星籁歌姬 萨勒芬妮", "星光漫射", "法师 辅助", "48.93%"},
            {new ImageIcon("src/images/Draven.png"), "荣耀行刑官 德莱文", "德莱文联盟", "射手", "48.97%"},
            {new ImageIcon("src/images/Jayce.png"), "未来守护者 杰斯", "海克斯科技电容", "战士 射手", "48.3%"},
            {new ImageIcon("src/images/Ziggs.png"), "爆破鬼才 吉格斯", "一触即发", "法师", "48.97%"},
            {new ImageIcon("src/images/Lulu.png"), "仙灵女巫 璐璐", "皮克斯,仙灵伙伴", "辅助 法师", "48.99%"},
            {new ImageIcon("src/images/Pantheon.png"), "不屈之枪 潘森", "矢志不退", "战士 刺客", "46.74%"},
            {new ImageIcon("src/images/Jax.png"), "武器大师 贾克斯", "无情连打", "战士 刺客", "47.95%"},
            {new ImageIcon("src/images/Shaco.png"), "恶魔小丑 萨科", "背刺", "刺客", "47%"}
    };
    private DefaultTableModel defaultTableModel;
    private JTable jTable;
    private JScrollPane jScrollPane;
    private JLabel jLabel;
    private JPanel jPanel;
    private JSplitPane jSplitPane;
    private JPopupMenu jPopupMenu;
    private JMenuItem jMenuItem;

    public Frame() {

        //初始化图形界面
        super("JTable By 刁旺睿");//设置窗口标题
        setSize(800, 600);//设置宽高
        setLocationRelativeTo(null);//设置居中
        setDefaultCloseOperation(EXIT_ON_CLOSE);//设置关闭
        setResizable(false);//设置窗体不可改变大小
        setLayout(new FlowLayout());//设置布局

        //创建DefaultTableModel
        defaultTableModel = new DefaultTableModel(rowData, columnNames);

        //创建JTable
        jTable = new JTable() {
            @Override
            public Class<?> getColumnClass(int column) {
                return getValueAt(0, column).getClass();
            }
        };//重写getColumnClass方法来显示图片
        jTable.setModel(defaultTableModel);
        jTable.getTableHeader().setFont(new Font("黑体", Font.BOLD, 20));//设置表头字体
        jTable.setFont(new Font("黑体", Font.PLAIN, 15));//设置表格字体
        jTable.setRowHeight(60);//设置表格行宽
        jTable.getColumnModel().getColumn(0).setMaxWidth(60);//设置第一列宽度
        jTable.getColumnModel().getColumn(0).setMinWidth(60);//设置第一列宽度
        jTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);//在所有的调整大小操作中,按比例调整所有的列。
        DefaultTableCellRenderer defaultTableCellRenderer = new DefaultTableCellRenderer();//单元格渲染器
        defaultTableCellRenderer.setHorizontalAlignment(JLabel.CENTER);//居中显示
        jTable.setDefaultRenderer(Object.class, defaultTableCellRenderer);//设置渲染器
        jTable.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                if (e.getButton() == 1) {
                    jLabel.setText("<html><body><div align=\"center\">" + "选中的单元格: " +
                            jTable.getValueAt(jTable.getSelectedRow(), jTable.getSelectedColumn()) +
                            "</div><div align=\"center\">" + "选中的行: " +
                            jTable.getValueAt(jTable.getSelectedRow(), 1) +
                            " " + jTable.getValueAt(jTable.getSelectedRow(), 2) +
                            " " + jTable.getValueAt(jTable.getSelectedRow(), 3) +
                            " " + jTable.getValueAt(jTable.getSelectedRow(), 4) +
                            " " + "</div></body></html>");
                }
                if (e.getButton() == 3) {
                    if (jTable.getSelectedRow() == -1) {
                        jLabel.setText("请选中行再点击右键");
                    } else {
                        jPopupMenu.show(jTable, e.getX(), e.getY());
                    }
                }
            }
        });//添加选中事件监听器

        //设置选择模式
        ListSelectionModel selectionModel = jTable.getSelectionModel();
        selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        //创建JScrollPane并将JTable放入其中
        jScrollPane = new JScrollPane(jTable, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

        //创建JLabel
        jLabel = new JLabel();
        jLabel.setHorizontalAlignment(JLabel.CENTER);
        jLabel.setFont(new Font("黑体", Font.BOLD, 20));

        //创建JPane
        jPanel = new JPanel();
        jPanel.setLayout(new BorderLayout());
        jPanel.add(jLabel, BorderLayout.CENTER);//添加创建好的JLabel

        //创建JPopupMenu
        jPopupMenu = new JPopupMenu();

        //创建JMenuItem并添加到JPopupMenu
        jMenuItem = new JMenuItem("在该行的下方放一只猫咪");
        jMenuItem.setFont(new Font("黑体", Font.BOLD, 15));
        jMenuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("在" + jTable.getSelectedRow() + "行的下方放一只猫咪");
                defaultTableModel.insertRow(jTable.getSelectedRow() + 1, new Object[]{
                        new ImageIcon("src/images/Yuumi.png"),
                        "魔法猫咪 悠米",
                        "连打带挡",
                        "辅助 法师",
                        "50.51%"
                });
            }
        });
        jPopupMenu.add(jMenuItem);

        //创建分割面板
        jSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true, jScrollPane, jPanel);
        jSplitPane.setEnabled(false);//设置分割线不可移动
        addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(ComponentEvent e) {
                jSplitPane.setDividerLocation(0.7);
            }
        });//设置监听器 获取当前窗口大小 按比例分配

        setContentPane(jSplitPane);
        setVisible(true);
    }

}

 5.Github仓库地址

 GitHub - sk8diao/JTable: 面向对象程序设计实验 如何使用JTable来展示数据

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值