java中的图形和二维图形

java中的图形和二维图形,java,awt,graphics2d,java-2d,japplet,Java,Awt,Graphics2d,Java 2d,Japplet,在java中使用方法时,我在更改我创建的钻石的颜色时遇到问题。我不知道如何继承或使用方法更正它。我只是希望它成为面向对象的,我不知道如何正确地做到这一点。请帮帮我 package Trial; import javax.swing.*; import java.awt.*; public class ColorRed extends JApplet { public GradientPaint gradientPaint; public void paint(Graphics

在java中使用方法时,我在更改我创建的钻石的颜色时遇到问题。我不知道如何继承或使用方法更正它。我只是希望它成为面向对象的,我不知道如何正确地做到这一点。请帮帮我

package Trial;

import javax.swing.*;
import java.awt.*;

public class ColorRed extends JApplet {
    public GradientPaint gradientPaint;
    public void paint(Graphics g){
        super.paint(g);
        Graphics2D g2 = (Graphics2D)g;
        GradientPaint black = new GradientPaint(50,20,Color.BLACK,50,50,Color.BLACK);
        blackDiamond(g2,black);
        GradientPaint yellowOrange = new GradientPaint(50,20,Color.YELLOW,50,50,Color.RED);
        redDiamond(g2,yellowOrange);

    }

    public void blackDiamond(Graphics2D g2,GradientPaint gradientPaint){
        int a [] = {100,50,100,150,100};
        int b [] = {10,60,110,60,10};
        setGradientPaint(gradientPaint);
        g2.setPaint(getGradientPaint());
        fillPolygon(a,b,5,g2);
    }
    public void redDiamond(Graphics2D g2,GradientPaint gradientPaint){
        int a2 [] = {100,60,100,140,100};
        int b2 [] = {20,60,100,60,20};
        setGradientPaint(gradientPaint);
        g2.setPaint(getGradientPaint());
        fillPolygon(a2,b2,5,g2);
    }

    public void fillPolygon(int a [], int b [] ,int c,Graphics2D g2){

        getGraphics().fillPolygon(a,b,c);
    }

    public GradientPaint getGradientPaint() {
        return gradientPaint;
    }

    public void setGradientPaint(GradientPaint gradientPaint) {
        this.gradientPaint = gradientPaint;
    }
}
这是我试图创建面向对象的代码,但它没有继承渐变绘制的颜色

这是我代码的结果

这是尚未创建多个方法的代码

import javax.swing.*;
import java.awt.*;

public class ColorRed extends JApplet {
    public GradientPaint gradientPaint;
    public void paint(Graphics g){
        super.paint(g);
        Graphics2D g2 = (Graphics2D)g;
        int a [] = {100,50,100,150,100};
        int b [] = {10,60,110,60,10};
        g.fillPolygon(a,b,5);
        GradientPaint red = new GradientPaint(50,10,Color.RED,10,70,Color.ORANGE);
        g2.setPaint(red);
        int a2 [] = {100,60,100,140,100};
        int b2 [] = {20,60,100,60,20};
        g.fillPolygon(a2,b2,5);

    }
}
这是我想要的结果:


我只是想把它组织起来,这样我就不会在paint方法中声明所有的局部变量,我只是想用不同的方法把它分开,问题是颜色不会改变。请帮帮我,非常感谢

可以这样组织,这样颜色很容易改变:

package Trial;

import javax.swing.*;
import java.awt.*;

public class ColorRed extends JApplet {
    private GradientPaint black;    
    private GradientPaint yellowOrange; 

    public void init() {
        setBlack(new GradientPaint(50,20,Color.BLACK,50,50,Color.BLACK));
        setYellowOrange(GradientPaint(50,20,Color.YELLOW,50,50,Color.RED));
    }

    public setBlack(GradientPaint black) {
        this.black = black;
    }

    public setYellowOrange(GradientPaint yellowOrange) {
        this.yellowOrange = yellowOrange;
    }

    public void paint(Graphics g){
        super.paint(g);
        Graphics2D g2 = (Graphics2D)g;
        blackDiamond(g2,black);
        redDiamond(g2,yellowOrange);
    }

    public void blackDiamond(Graphics2D g2,GradientPaint gradientPaint){
        int a [] = {100,50,100,150,100};
        int b [] = {10,60,110,60,10};
        g2.setPaint(gradientPaint);
        fillPolygon(a,b,5,g2);
    }
    public void redDiamond(Graphics2D g2,GradientPaint gradientPaint){
        int a2 [] = {100,60,100,140,100};
        int b2 [] = {20,60,100,60,20};
        g2.setPaint(gradientPaint);
        fillPolygon(a2,b2,5,g2);
    }

    public void fillPolygon(int a [], int b [] ,int c,Graphics2D g2){

        g2.fillPolygon(a,b,c);
    }
}

不幸的是,我没有找到一个在线swing runner来测试它。

我修改了Adder的答案(如广告所示),这样它就可以在不使用JApplet的情况下工作(JApplet也被标记为已弃用)。我添加了一些不同的评论


导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.GradientPaint;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
公共类ColorRed扩展了JPanel{
私人梯度漆黑色;
私人梯度漆黄橙色;
JFrame=新JFrame();
公共静态void main(字符串[]args){
调用器(()->new ColorRed().init());
}
公共void init(){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置面板大小
setPreferredSize(新尺寸(500500));
//将面板添加到框架。
框架。添加(此);
//调整框架和子构件
frame.pack();
//在屏幕上居中显示
frame.setLocationRelativeTo(空);
frame.setVisible(true);
setBlack(新的渐变色漆(50,20,Color.BLACK,50,50,Color.BLACK));
setYellowOrange(新渐变漆(50,20,Color.YELLOW,50,50,Color.RED));
}
公共空间(渐变漆黑色){
黑=黑;
}
公共空间设置黄色橙色(GradientPaint黄色橙色){
this.yello橙色=黄色橙色;
}
//使用油漆组件(g)而不是油漆(g)
公共组件(图形g){
超级组件(g);
图形2d g2=(图形2d)g;
黑钻石(g2,黑色);
红钻石(g2,黄橙色);
}
公共空白黑钻石(Graphics2D g2,GradientPaint GradientPaint){
inta[]={100,50,100,150,100
};
intb[]={10,60,110,60,10
};
g2.设置涂料(梯度涂料);
填充多边形(a、b、5、g2);
}
公共空间红色钻石(Graphics2D g2,GradientPaint GradientPaint){
int a2[]={100,60,100,140,100
};
int b2[]={20,60,100,60,20
};
g2.设置涂料(梯度涂料);
填充多边形(a2、b2、5、g2);
}
公共空心填充多边形(int a[],int b[],int c,Graphics2D g2){
g2.填充多边形(a、b、c);
}
}

您的
fillPolygon
方法不使用其
g2
参数。即使我使用它并将其放入fillPolygon中,也不会发生任何事情
组件。永远不应调用getGraphics()
。(我希望它的文档能够指出。)不要使用小程序。它们已经过时了。我也不想使用它,但我的it是我的主题OOP必须通过的。