2016-04-15 8 views
1

Ich zeichne Schatten auf undecorated Jframe mit GradientPaint Klasse Unter Windows OS ist alles in Ordnung. Aber auf Mac OS, wenn ich Java 7/8 Schatten wähle, ist größer dann in Java 6. Was mache ich falsch?Warum zeichnet GradientPaint anders in Java 6 und Java 7/8 auf MAC OS

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 
    ..... 
    } 
} 

Antwort

0

Es ist sehr wahrscheinlich nicht du, wer etwas falsch machen. Es könnten allgemeine Unterschiede zu Mac/Win und auch Unterschiede zur Java-Version sein.

Bis zu Java 6 entwickelte Apple Java, aber von Java 7 wurde der Code dann zu Oracle verschoben, der ihn nun verwaltet. Dieser Übergang beinhaltete auch viele Änderungen im Quell- und Som-GUI-Verhalten und die Unterschiede, die Sie in Java 6 gegenüber Java 7/8 sehen, sind darauf zurückzuführen.

Ich würde wahrscheinlich eine if-Anweisung machen und das Betriebssystem überprüfen, um die Unterschiede zwischen Win und Java 7/8 unter Mac OSX zu behandeln, und vergessen, wie es im alten Java 6 auf dem Mac aussieht.