java swing paint paint bonanza

时间:2010-11-13 04:34:22

标签: java swing

我有一个程序将应用程序逻辑与图形分开。有几种配色方案,我想知道这是否是可接受的编程,或者是否有更好的方法来完成选择和绘制配色方案:

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    colorScheme = gameLogic.getColorScheme();

    for (int i = 0; i < gameLogic.getParticleArrSize(); i++) {
        if (colorScheme == 0) {
            setBackground(Color.WHITE);
            g.setColor(gameLogic.getParticleColor(i));
            g.fillOval(gameLogic.getParticleXCoor(i),
                    gameLogic.getParticleYCoor(i),
                    gameLogic.getParticleSize(i),
                    gameLogic.getParticleSize(i));
            g.setColor(gameLogic.getCurrPartColor());
            g.fillOval(mouseX - mouseOvalRadius, mouseY - mouseOvalRadius,
                    mouseOvalSize, mouseOvalSize);
            g.setColor(gameLogic.getCursorColor());
            g.fillOval(mouseX - 19, mouseY - 19, 38, 38);
        } else if (colorScheme == 1) {
            setBackground(Color.WHITE);
            g.setColor(gameLogic.getParticleBorderColor(i));
            g.fillOval(gameLogic.getParticleXCoor(i) - 3,
                    gameLogic.getParticleYCoor(i) - 3,
                    gameLogic.getParticleSize(i) + 6,
                    gameLogic.getParticleSize(i) + 6);
            g.setColor(gameLogic.getParticleColor(i));
            g.fillOval(gameLogic.getParticleXCoor(i),
                    gameLogic.getParticleYCoor(i),
                    gameLogic.getParticleSize(i),
                    gameLogic.getParticleSize(i));
            g.setColor(gameLogic.getCurrPartColor());
            g.fillOval(mouseX - mouseOvalRadius, mouseY - mouseOvalRadius,
                    mouseOvalSize, mouseOvalSize);
            g.setColor(gameLogic.getCursorColor());
            g.fillOval(mouseX - 19, mouseY - 19, 38, 38);


        } else if (colorScheme == 2) {
            setBackground(Color.BLACK);
            g.setColor(Color.WHITE);
            g.fillOval(gameLogic.getParticleXCoor(i) - 3,
                    gameLogic.getParticleYCoor(i) - 3,
                    gameLogic.getParticleSize(i) + 6,
                    gameLogic.getParticleSize(i) + 6);
            g.setColor(gameLogic.getParticleColor(i));
            g.fillOval(gameLogic.getParticleXCoor(i),
                    gameLogic.getParticleYCoor(i),
                    gameLogic.getParticleSize(i),
                    gameLogic.getParticleSize(i));
            g.setColor(Color.WHITE);
            g.fillOval(mouseX - mouseOvalRadius - 2,
                    mouseY - mouseOvalRadius - 2,
                    mouseOvalSize + 4,
                    mouseOvalSize + 4);
            g.setColor(gameLogic.getCursorColor());
            g.fillOval(mouseX - 19, mouseY - 19, 38, 38);

        } else if (colorScheme == 3) {
            setBackground(Color.WHITE);
            g.setColor(Color.BLACK);
            g.fill3DRect(gameLogic.getParticleXCoor(i) - 2,
                    gameLogic.getParticleYCoor(i) - 2,
                    gameLogic.getParticleSize(i) + 4,
                    gameLogic.getParticleSize(i) + 4, true);
            g.setColor(gameLogic.getParticleColor(i));
            g.fillRect(gameLogic.getParticleXCoor(i),
                    gameLogic.getParticleYCoor(i),
                    gameLogic.getParticleSize(i),
                    gameLogic.getParticleSize(i));
            g.setColor(Color.BLACK);
            g.fillRect(mouseX - mouseOvalRadius,
                    mouseY - mouseOvalRadius,
                    mouseOvalSize,
                    mouseOvalSize);
            g.setColor(gameLogic.getCursorColor());
            g.fillRect(mouseX - mouseOvalRadius + 7,
                    mouseY - mouseOvalRadius + 7,
                    mouseOvalSize - 14,
                    mouseOvalSize - 14);

        }
    }
}

2 个答案:

答案 0 :(得分:1)

您应该调查LookAndFeel concept in Swing。它允许您定义不同的颜色方案,并为您提供一个框架,以确保所有组件具有相似的外观。

答案 1 :(得分:1)

您可以定义一个抽象颜色方案类,它将声明用于绘制单个游戏对象的方法(实现将使用不同的形状或颜色)。您发布的paintComponent方法只会获取当前的颜色方案并将所有绘图委托给它。