java - 使用 Graphics2D 为 2 个椭圆着色

标签 java swing graphics2d

我想使用 Graphics2D 在 Java 中为 2 个椭圆形着色。 Oval1(point) 绿色,Oval2(point2) 蓝色。问题是 Oval2 变为绿色,Oval1 变为黑色。有人知道问题出在哪里吗?

enter image description here 左(椭圆1)右(椭圆2)

这是 SSCCE:

GameView.java

import javax.swing.JFrame;
import stackoverflow.GameView;

public class GameView extends JFrame{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private Game game = new Game();

    public GameView(){
        JFrame gameFrame = new JFrame("Game");
        gameFrame.setSize(500, 300);
        gameFrame.setVisible(true);
        gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gameFrame.add(game);        
        game.runGame();
    }

    public static void main(String[] args) throws InterruptedException {
        new GameView();     
    }
}

Game.java

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
import stackoverflow.Point;

public class Game extends JPanel{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private Point point = new Point(Color.GREEN);
    private Point point2 = new Point(Color.BLUE);

    public void runGame(){
        repaint();
        point2.setX(300);
    }

    public void paint(Graphics g) {
        point.paint(g);
        point2.paint(g);
    }   
}

Point.java

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

public class Point {

    private int x = 100;
    private int y = 100;
    private int width = 10;
    private int height = 10;

    private Color color;

    public Point(Color color){
        this.color = color;
    }

    public void paint(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;    
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.fillOval(x, y, width, height);
        g2d.setColor(this.color);
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }   
}

最佳答案

更改这些调用的顺序...

g2d.fillOval(x, y, width, height);
g2d.setColor(this.color);

您应该在 JPanel.paintComponent 中进行绘画。

关于java - 使用 Graphics2D 为 2 个椭圆着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33303139/

相关文章:

java - 如何检查按钮颜色是否与java Graphics中的正方形颜色相同并增加点数

java - 将更多具有相同ID的项目插入Redis中的哈希

java - 正确使用java Commons BeanUtils?

java - 当另一个 JFrame 可见时,模式对话框并不总是位于未修饰的 JFrame 之上

Java Swing - JTextPane 中插入组件的问题

java - 以编程方式设置 JComboBox 索引时触发 ItemListener

java - 快速缩放图像并确保其实际缩放

java - 如何在javadoc中写入单词 "todo"而不触发 Sonar 警报?

java - 如何在 java 中均匀调整 JFrame 的大小以使其保持其方形

java - 使用 Graphics2D Area 的替代方案?