JTable单元格无法正确渲染形状

时间:2010-06-10 12:07:20

标签: java swing java-2d

我正在尝试使用子类JPanel渲染我的JTable单元格,单元格应显示为彩色矩形,并在其上绘制圆圈。当表格显示时,一切看起来都不错,但是当细胞被移除时,单元格上显示一个对话框或其他东西时,已覆盖的单元格无法正确渲染,圆圈被分解等等。然后我必须移动滚动条或者扩展窗口以使它们正确地重绘。

我用于渲染单元格的组件的paintComponent方法如下:

protected void paintComponent(Graphics g) { 
    setOpaque(true);
    super.paintComponent(g); 
    Graphics2D g2d = (Graphics2D) g;
    GradientPaint gradientPaint = new GradientPaint(new Point2D.Double(0, 0),    Color.WHITE, new Point2D.Double(0,
            getHeight()), paintRatingColour);
    g2d.setPaint(gradientPaint);
    g2d.fillRect(0, 0, getWidth(), getHeight());

    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);  
    g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);

    Rectangle clipBounds = g2d.getClipBounds();
    int x = new Double(clipBounds.getWidth()).intValue() - 15;
    int y = (new Double(clipBounds.getHeight()).intValue() / 2) - 6;

    if (level != null) { 
        g2d.setColor(iconColour);
        g2d.drawOval(x, y, width, height);
        g2d.fillOval(x, y, width, height); 
    } 
}

1 个答案:

答案 0 :(得分:1)

由于@Gnoupi使用level进行观察,目前尚不清楚widthheight是如何初始化的。为满足类似需求,此example扩展DefaultTableCellRenderer并实施Icon以便更轻松地控制几何体。它的工作也没有文字。