2010-06-10 10 views
1

Я пытаюсь сделать мои ячейки JTable подклассовой 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

Вы должны указать больше контекста. Например, как это называется, каковы переменные с большей областью действия (например, этот «уровень») и т. Д. В идеале попытайтесь создать [SSCCE] (http://sscce.org/). – Gnoupi

ответ

1

Как отмечает @ Gnoupi с level, это не ясно, как width и height инициализируются. Для удовлетворения аналогичной потребности этот example расширяет DefaultTableCellRenderer и реализует Icon для упрощения управления геометрией. Он работает и без текста.

Смежные вопросы