当前位置: 首页 > 知识库问答 >
问题:

JTable头渲染器

林亦
2023-03-14

我试图使我的JTable头的背景具有渐变。

这可以很好地使用代码:

      String[] colName = new String[] { "#", "Location", "Name" ,"Source", "System", "Hits", "Current", "Time" };
        Object[][] products = new Object[][] { 

            };

        dtm = new DefaultTableModel(products, colName) { 
            @Override
            public boolean isCellEditable(int row, int column) {
               //all cells false
               return false;
            }  
        };

        table = new JTable( dtm );
        table.setRowHeight(32);
        table.getTableHeader().setReorderingAllowed(false);
        table.setDefaultRenderer(Object.class, new VisitorRenderer()); 
        table.setFont(new java.awt.Font("Tahoma", Font.PLAIN, 12));  

        table.getColumnModel().getColumn(0).setMinWidth(5);
        table.getColumnModel().getColumn(1).setMinWidth(50);
        table.getColumnModel().getColumn(2).setMinWidth(5);            
        table.getColumnModel().getColumn(3).setMinWidth(5);
        table.getColumnModel().getColumn(4).setMinWidth(5);
        table.getColumnModel().getColumn(5).setMinWidth(3);
        table.getColumnModel().getColumn(6).setMinWidth(230);
        table.getColumnModel().getColumn(7).setMinWidth(3);

final JTableHeader header = table.getTableHeader();
header.setPreferredSize(new Dimension(100, 37));

header.setDefaultRenderer(new DefaultTableCellHeaderRenderer() {
    private Object selectedColumn;

    @Override
     public void paintComponent(Graphics g) {
        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
        GradientPaint gp = new GradientPaint(0, 0,
            new java.awt.Color(237, 237, 237), 0, getHeight(),
            new java.awt.Color(222, 222, 222));
        g2d.setPaint(gp);
        g2d.fillRect(0, 0, getWidth(), getHeight());
    }                 

    @Override
    public Component getTableCellRendererComponent(
        JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        DefaultTableCellHeaderRenderer rendererComponent = (DefaultTableCellHeaderRenderer) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

        if (selectedColumn == value) {
            rendererComponent.setBorder(BorderFactory.createCompoundBorder(rendererComponent.getBorder(), BorderFactory.createLineBorder(Color.red, 1)));
            rendererComponent.setHorizontalAlignment(SwingConstants.LEFT);
        } else {
            rendererComponent.setBorder(BorderFactory.createCompoundBorder(rendererComponent.getBorder(), BorderFactory.createEmptyBorder(0, 5, 0, 0)));
            rendererComponent.setHorizontalAlignment(SwingConstants.CENTER);
        }
        if (column == 0) {
            rendererComponent.setForeground(header.getForeground());
        } else {
            rendererComponent.setForeground(header.getForeground());
        }

        return rendererComponent;
    }
});

然而,由于某种原因,我看不到我的边框和文本,似乎文本也应用了渐变?

我希望文本为黑色,各栏之间有彩色边框。有什么想法吗?

共有1个答案

乔丁雨
2023-03-14

类,sun.swing.table.DefaultTableCellHeaderRenler,不是一个好的选择。相反,获取一个引用,并将其包装在TableCellRenler的实现中,如图所示。另请参见Darryl Burke的Default Table Header单元格渲染器。

 类似资料:
  • 问题内容: 我正在跟踪发现的一些代码,(是的,我知道它是如何工作的)它来自这里:代码链接 我想做的是如果单元格值设置为“黄色”,则设置单元格前景色 这是我的代码: 和单元格渲染器 问题是,如果我将任何单元格值设置为“黄色”,它就不会改变 提前致谢! 问题答案: 您的渲染器曾经使用过吗?您将其设置为包含String的单元格的默认渲染器,但是是否重载了模型的方法,以便它知道某些单元格包含String

  • 我已经建立了一个,并使其包含18列。最初,当它是13列时,它非常适合JTable,并且没有撕裂。然而,一旦我使它包含18个表,并将自动调整大小设置为关闭,当我使用水平滚动条尝试滚动其他列时,JTable的撕裂开始发生,如图所示: Netbeans还开始向我发送大量错误消息,如: 为什么会这样?这个问题有什么解决办法吗?谢谢 真抱歉!下面是用于初始化表的代码。希望会有用!

  • 图片

  • 在 Hexo 中,有两个方法可用于渲染文件或字符串,分别是非同步的 hexo.render.render 和同步的 hexo.render.renderSync,这两个方法的使用方式十分类似,因此以下仅以非同步的 hexo.render.render 为例。 渲染字符串 在渲染字符串时,您必须指定 engine,如此一来 Hexo 才知道该使用哪个渲染引擎来渲染。 hexo.render.rend

  • 问题内容: 假设我有以下JTable,只要按下一个按钮,就会显示该JTable: 我想呈现 最初 对JCheckBox 为真的单元格,以及所有 最初为 false的所有单元格不显示任何内容(无JCheckBox)。用户可以选中或取消选中最初为真的单元格中的JCheckBoxes,这会对我创建的图表有所帮助。 现在,我的单元格渲染器在所有单元格中显示JCheckBoxes,包括最初为false的单元

  • 6.1 渲染模板 一旦你拥有一个模版文件,你可以通过给一个map来给它传递数据。 map是一个变量及赋予的值的集合,模板使用它来得到变量的值,或者对于块标签求值。 它的渲染函数有一个可选的变量键值对map 通过 ctx.Render() 方法来渲染模板,例如: func (r *Render) Serve(ctx *faygo.Context) error { return ctx.Ren