带图标的表格头的例子

该博客提供了一个带图标的表格头的 Java 代码示例。代码中导入了多个 Java 相关的类库,定义了表格数据和列名,创建了表格模型和表格,为表格头设置图标,并实现了图像更新时的重绘功能,最后展示了窗口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

带图标的表格头的例子

/*
 * Created on 2005-12-20
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */


import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.ImageObserver;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;

/**
 * @author Nobuo Tamemasa
 * @version 1.0 06/19/99
 */
public class AnimatedIconHeaderExample extends JFrame {

    private static Object[][] data = null;

    private static String[] column = null;

    public static Object[][] getData() {
        if (data == null)
            data = new Object[][] { { "Leopard", "Lycaon" },
                    { "Jaguar", "Jackal" }, { "Cheetah", "Coyote" },
                    { "Puma", "Dingo" }, { "Lynx", "Fox" }, { "Tom", "Hot" } };
        return data;
    }

    public static String[] getColumn() {
        if (column == null) {
            column = new String[] { "Cat", "Dog" };
        }
        return column;
    }

    public AnimatedIconHeaderExample() {
        super("AnimatedIconHeader Example");

        ImageIcon[] icons = { new ImageIcon("images/3-119.gif"),
                new ImageIcon("images/3-6.gif") };

        DefaultTableModel model = new DefaultTableModel() {
            public int getColumnCount() {
                return getColumn().length;
            }

            public int getRowCount() {
                return getData().length;
            }

            public String getColumnName(int col) {
                return getColumn()[col];
            }

            public Object getValueAt(int row, int col) {
                return getData()[row][col];
            }
        };

        JTable table = new JTable(model) {
            public TableColumn getColumn(Object identifier) {
                System.out.println("give me a rander");
                (new MyTableColumn()).creatHeaderRenderer(super
                        .getColumn(identifier));
                return super.getColumn(identifier);
            }

            class MyTableColumn extends TableColumn {

                private MyTableColumn() {
                    super();
                }

                /**
                 * @param column
                 */
                public void creatHeaderRenderer(TableColumn superColumn) {
                    if (superColumn.getHeaderRenderer() == null) {
                        superColumn.setHeaderRenderer(super
                                .createDefaultHeaderRenderer());
                        System.out.println("have a rander");
                    }
                }

            }
        };
        JTableHeader header = table.getTableHeader();
        JLabel renderer;
        for (int i = 0; i < model.getColumnCount(); i++) {
            renderer = (JLabel) table.getColumn(model.getColumnName(i))
                    .getHeaderRenderer();
            if (renderer != null)
                renderer.setIcon(icons[i]);
            else
                System.out.println("nullrander");

            // If you have only one column.
            // icons[i].setImageObserver(header);

            icons[i].setImageObserver(new HeaderImageObserver(header, i));
        }
        JScrollPane pane = new JScrollPane(table);
        getContentPane().add(pane);
    }

    class HeaderImageObserver implements ImageObserver {
        JTableHeader header;

        int col;

        HeaderImageObserver(JTableHeader header, int col) {
            this.header = header;
            this.col = col;
        }

        public boolean imageUpdate(Image img, int flags, int x, int y, int w,
                int h) {
            if ((flags & (FRAMEBITS | ALLBITS)) != 0) {
                Rectangle rect = header.getHeaderRect(col);
                header.repaint(rect);
            }
            return (flags & (ALLBITS | ABORT)) == 0;
        }
    }

    public static void main(String[] args) {
        AnimatedIconHeaderExample frame = new AnimatedIconHeaderExample();
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        frame.setSize(300, 140);
        frame.setVisible(true);
    }
}

从官方网站上当下的tame有很多例子不能使用。包里也有些方法是废弃的。整理一了下。
### Element Plus 表格列中显示图标的实现方法 在 `el-table` 组件内展示图标可以通过多种方式来完成,其中一种常见的方式是在特定的 `<el-table-column>` 中使用自定义模板插槽(slot)。通过这种方式可以灵活控制每一行数据对应的单元格内的内容,从而轻松地加入各种类型的图标。 对于希望在某一行的数据旁边放置操作按钮或者其他形式的小图标而言,可以在对应列设置具名作用域插槽,并在此处编写 HTML 或者其他 Vue 组件用于渲染所需图形元素。下面给出一段简单的例子说明如何向表格中的某一列添加图标: ```html <template> <div> <!-- 定义一个 el-table --> <el-table :data="tableData"> <!-- 使用 scoped slot 自定义该列的内容 --> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column label="操作"> <template v-slot="{ row }"> <!-- 这里可以根据实际需求替换为不同的icon组件 --> <i class="el-icon-edit" @click="handleEdit(row)" title="编辑"/> <i class="el-icon-delete" style="margin-left: 8px;" @click="handleDelete(row)" title="删除"/> </template> </el-table-column> </el-table> </div> </template> <script setup lang="ts"> import { ref } from 'vue'; const tableData = ref([ { name: '张三', }, // 更多条目... ]); function handleEdit(row) { console.log('edit:', row); } function handleDelete(row) { console.log('delete:', row); } </script> ``` 上述代码展示了怎样利用 `v-slot` 来创建有两个不同功能(编辑和删除)图标的“操作”列[^1]。此方法不仅限于静态图片链接;也可以集成来自第三方库如 Font Awesome 的矢量图标,或是应用内部定义好的 SVG 图标集等资源。 #### 关键点总结 - 利用 `el-table-column` 的 `scoped slot` 功能定制化每列表现。 - 结合事件绑定机制 (`@click`) 实现交互行为。 - 调整样式以适应设计要求 (例如调整间距 `style="margin-left: 8px;"`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值