繁体   English   中英

java swing paint paint bonanza

[英]java swing paint method bonanza

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

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);

        }
    }
}

您应该研究Swing中LookAndFeel概念 它允许您定义不同的配色方案,并为您提供一个框架,以确保所有组件都具有相似的外观。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM