title: Gradient problems in Java
body: <p>In my program I wanted to have a translucent white to transparent gradient on my JFrame to overlay a yellow background. This works fine and it needs to be a white to transparent because of how my settings for the program work for the user. However, when I take the program into college (JRE7 to my JRE6) the gradient goes white to blackish then transparent... It isn't so bad until you start to increase the opacity of the white colour... is there anyway I can fix this?</p>
  
  <p>here is the relevant code from the top of my JFrame code.</p>
  
  <pre><code>public class DictionaryGUI extends JFrame
  {   
      protected JPanel pGradientPane;
  
      //Interface gradient specification
      private Color pInterfaceColour = new Color(255, 245, 62);
      protected int iDegreeWhite = 180
      protected int iDegreeBlack = 0
  
      DictionaryGUI(int iWidth, int iHeight)
      {
          /*General definitions*/
          super(String.format("French Verb Conjugator - Version %s", MainLauncher.version));
          setSize(iWidth, iHeight);
          new Menu(this);
  
          this.iWidth = iWidth;    
          this.iHeight = iHeight;
  
          getContentPane().setBackground(pInterfaceColour);
          pGradientPane = new JPanel(new GridBagLayout())
          {
              private static final long serialVersionUID = 1L;
  
              protected void paintComponent(Graphics pGraphics) 
              {
                  Graphics2D pGraphicsGradientRender = (Graphics2D) pGraphics;
                  pGraphicsGradientRender.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                  GradientPaint pGradient = new GradientPaint(0, 0, new Color(255, 255, 255, iDegreeWhite), 0, getHeight(), new Color(0, 0, 0, iDegreeBlack));
                  pGraphicsGradientRender.setPaint(pGradient);
                  pGraphicsGradientRender.fillRect(0, 0, getWidth(), getHeight());
                  super.paintComponent(pGraphics);
              }
          };
          pGradientPane.setOpaque(false);
          pGradientPane.setPreferredSize(new Dimension(iWidth - 16, iHeight - 62));
          /*components added to pGradientPane here!*/
          add(pGradientPane);
      }
  </code></pre>
  
  <p>And the mainclass aswell:</p>
  
  <pre><code>public class MainLauncher
  {
      static int iHeight = 400;
      static int iWidth = 730;
      static String version = "0A3B6";
  
      public static void main(String[] args)
      {
      try 
      {
          for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels())
          {
              if ("Nimbus".equals(info.getName()))
              {
                  UIManager.setLookAndFeel(info.getClassName());
                  break;
              }
          }
      } catch (Exception e) {e.printStackTrace();}
      DictionaryGUI window = new DictionaryGUI(iWidth, iHeight);
      window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      window.setLocationByPlatform(true);
      window.setVisible(true);
  }
  </code></pre>
  
  <p>Is it just some difference between JRE6 and JRE7? should I make the bottom colour to white aswell? (was black incase people want to darken the colour at the bottom.)</p>
  
  <p>I can post some screenshots tommorrow if anybody needs them....</p>
  
  <p><img src="https://i.stack.imgur.com/bDhYu.png" alt="What the gradient should look like"></p>
  
  <p><img src="https://i.stack.imgur.com/syCQF.png" alt="What the gradient actually looks like for some"></p>
  
  <p>Thanks
  Jamie</p>
  
  <p><strong>EDIT:</strong>
  I changed the second (transparent) colour in the gradient to white and it fixes the problem. However, I am still troubled to why the transparent black colour shows through in the middle? it must be something to do with JRE7 because thats where it occurs... maybe they changed something with how transparency in gradients work. Does anybody know how to eliminate this problem while keeping the colour black?</p>