Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8067916

Rendering Problems when Subclass the Color Class

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P4 P4
    • 9
    • 7u55, 8, 9
    • client-libs

      FULL PRODUCT VERSION :
      java version "1.7.0_55"
      Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
      Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)


      ADDITIONAL OS VERSION INFORMATION :
      Linux phenom 3.2.0-59-generic #90-Ubuntu SMP Tue Jan 7 22:43:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

      EXTRA RELEVANT SYSTEM CONFIGURATION :
      Product Version: NetBeans IDE 8.0.1 (Build 201408251540)
      Updates: Updates available to version NetBeans 8.0.1 Patch 1.1
      Java: 1.7.0_55; Java HotSpot(TM) 64-Bit Server VM 24.55-b03
      Runtime: Java(TM) SE Runtime Environment 1.7.0_55-b13
      System: Linux version 3.2.0-59-generic running on amd64; UTF-8; en_US (nb)
      User directory: /home/hartman/.netbeans/8.0.1
      Cache directory: /home/hartman/.cache/netbeans/8.0.1

      A DESCRIPTION OF THE PROBLEM :
      Unable to correctly render simple geometric shapes and lines when the Graphics2D setColor() method receives a subclass of Color as its parameter.

      This appears to have been reported in an Apple forum in 2005: http://lists.apple.com/archives/java-dev/2005/Jan/msg00499.html


      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      See example code.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Comment and uncomment lines 20 & 21.

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      import java.awt.Color;
      import java.awt.Graphics;
      import java.awt.Graphics2D;
      import java.awt.RenderingHints;
      import java.awt.Shape;
      import java.awt.geom.Ellipse2D;
      import javax.swing.JFrame;
      import javax.swing.JPanel;
      import javax.swing.SwingUtilities;

      class MyPanel extends JPanel
      {
        private static final double radius = 80.0;
        
        private void doDrawing(Graphics g)
        {
          Graphics2D g2d = (Graphics2D) g;
          g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
          
          MyColor color = new MyColor(Color.BLUE);
      // Color color = Color.BLUE;
          g2d.setColor(color);
          Shape circle = new Ellipse2D.Double(160 - radius, 120 - radius, 2.0 * radius, 2.0 * radius);
          g2d.draw(circle);
        }

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

      public class ColorSubclassDemo extends JFrame
      {
        public static final int width = 320;
        public static final int height = 240;
        
        public ColorSubclassDemo()
        {
          initUI();
        }

        private void initUI()
        {
          setTitle("Color Subclass Demo");
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          add(new MyPanel());
          setSize(width, height);
          setLocationRelativeTo(null);
        }

        public static void main(String[] args)
        {
          SwingUtilities.invokeLater(new Runnable()
          {
            @Override
            public void run()
            {
              ColorSubclassDemo demo = new ColorSubclassDemo();
              demo.setVisible(true);
            }
          });
        }
      }

      class MyColor extends Color
      {
        private boolean userDefined;

        public MyColor(Color color)
        {
          super(color.getRed(), color.getGreen(), color.getBlue(), color.getTransparency());
          userDefined = false;
        }
        
        public MyColor(Color color, boolean userDefined)
        {
          super(color.getRed(), color.getGreen(), color.getBlue(), color.getTransparency());
          this.userDefined = userDefined;
        }
      }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Workaround: do not extend Color.

            azvegint Alexander Zvegintsev
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: