java中的图形和二维图形
在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
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必须通过的。