java - 为什么 GradientPaint 在 MAC OS 上的 Java 6 和 Java 7/8 中绘制不同

标签 java

我使用 GradientPaint 类在未修饰的 Jframe 上绘制阴影 在 Windows 操作系统上一切正常。但是在 Mac OS 上,当我选择 java 7/8 时,阴影比 java 6 中的阴影更大。我做错了什么?

public class DropShadowPanel extends JPanel() {

//class fields and constructor
.....

   @Override
   protected void paintComponent(Graphics gr) {
     super.paintComponent(gr);
     Graphics2D g = (Graphics2D) gr;

     Rectangle2D r = new Rectangle2D.Double(shadowDistance,shadowDistance, 300, 300);

     draw(g, r, shadowSize);
  }

  private void draw(Graphics2D g, Rectangle2D r, double shadowSize) {
    Color c0 = shadowColor;
    //c1 - full opacity color
    Color c1 = new Color(255, 255, 255, 0);

    double x0 = r.getMinX();
    double y0 = r.getMinY();
    double x1 = r.getMaxX();
    double y1 = r.getMaxY();
    double w = r.getWidth();
    double h = r.getHeight();

    // Left
    g.setPaint(new GradientPaint(
      new Point2D.Double(x0, y0), c0,
      new Point2D.Double(x0 - s, y0), c1));
    g.fill(new Rectangle2D.Double(x0 - s, y0, s, h));

    //draw the remaining sides
    .....
  }
}

最佳答案

很可能不是你做错了什么。它可能是与 Mac/Win 的一般差异,也可能是与 Java 版本的差异。

在 Java 6 之前,Apple 一直在开发 Java,但从 Java 7 开始,代码被转移到了 Oracle,现在由 Oracle 负责维护。此转换还包括源代码和某些 GUI 行为的许多更改,您在 Java 6 与 Java 7/8 中看到的差异就是由于这些变化。

我可能会做一个 if 语句并检查操作系统来处理 Mac OSX 上的 Win 和 Java 7/8 之间的差异,而忘记它在 Mac 上的旧 Java 6 中的样子。

关于java - 为什么 GradientPaint 在 MAC OS 上的 Java 6 和 Java 7/8 中绘制不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36654712/

相关文章:

java - 不能对 Double.MAX_VALUE Java 使用减法运算符

java - JPA ORM XML 标签

java - 反向 for 循环 - 需要解释

java - MongoDB java : Perist POJO class with generic field

java - 将blob图像转换为数组以在spring mvc中的网页中显示

java - 用点中心在 Java 中创建一个 Circle 类?

Java主类实例访问

java - Spring roo实体依赖

java - 使用数据结构在 Java 中实现家谱的最佳方法

java正则表达式匹配变量