Так вот у меня есть набор коды для отображения сгенерированных многоугольников с фоном:Как я могу изменить мой код для дождя и плаката появляться
public class Drawing extends JFrame{
public static void main(String []args)
{
Drawing b = new Drawing();
}
public Drawing()
{
//JFrame frame = new JFrame("Poster");
setSize(1180,750);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(new MyComponent());
setVisible(true);
//background
setLayout(new BorderLayout());
JLabel background=new JLabel(new ImageIcon("J:\\1. Current Works\\CSC533\\1. project 1.0\\bg.jpg"));
add(background);
background.setLayout(new FlowLayout());
}
public class MyComponent extends JComponent
{
public void paint(Graphics g)
{
/*Iron Man Part Start*/
//Iron Man
Graphics2D g2 = (Graphics2D)g;
g.setColor(Color.red);//face
g.fillOval(200,60,190,200);
//MaskKiri
Polygon mask1 = new Polygon();
mask1.addPoint(230,85);//1st
mask1.addPoint(230,200);//2nd
mask1.addPoint(260,255);//3rd
mask1.addPoint(290,255);//4rd
mask1.addPoint(290,100);//5rd
mask1.addPoint(250,100);//6rd
mask1.addPoint(250,85);//7rd
g.setColor(Color.yellow);
g.fillPolygon(mask1);
//MaskKanan
Polygon mask2 = new Polygon();
mask2.addPoint(280,100);//1st
mask2.addPoint(280,255);//2nd
mask2.addPoint(330,255);//3rd
mask2.addPoint(360,200);//4rd
mask2.addPoint(360,85);//5rd
mask2.addPoint(340,85);//6rd
mask2.addPoint(340,100);//7rd
g.setColor(Color.yellow);
g.fillPolygon(mask2);
//Iron Man Left Eye
g.setColor(Color.red);
g.fillRect(240,150,40,10);
//Iron Man Right Eye
g.setColor(Color.red);
g.fillRect(310,150,40,10);
//Iron Man Fucking Mouth
g.setColor(Color.red);
g.fillRect(255,220,80,10);
/*Iron Man Part End*/
/*Flash Part Start*/
//Flash code
Graphics2D g3 = (Graphics2D)g;
g.setColor(Color.red);//flash
g.fillOval(800,50,200,200);
//Flash eye (lebar,bawah)
Polygon eye2 = new Polygon();
eye2.addPoint(830,100);//1st
eye2.addPoint(830,140);//2nd
eye2.addPoint(870,150);//3rd
eye2.addPoint(870,126);//4rd
g.setColor(Color.white);
g.fillPolygon(eye2);
//Flash eye (lebar,bawah)
Polygon eye3 = new Polygon();
eye3.addPoint(970,100);//1st
eye3.addPoint(970,140);//2nd
eye3.addPoint(930,150);//3rd
eye3.addPoint(930,126);//4rd
g.setColor(Color.white);
g.fillPolygon(eye3);
//Flash mouth (lebar,bawah)
Polygon mouth = new Polygon();
mouth.addPoint(830,160);//1st
mouth.addPoint(830,210);//2nd
mouth.addPoint(900,230);//3rd
mouth.addPoint(900,186);//4rd
g.setColor(Color.white);
g.fillPolygon(mouth);
//Flash mouth (lebar,bawah)
Polygon mouth2 = new Polygon();
mouth2.addPoint(970,160);//1st
mouth2.addPoint(970,210);//2nd
mouth2.addPoint(900,230);//3rd
mouth2.addPoint(900,186);//4rd
g.setColor(Color.white);
g.fillPolygon(mouth2);
//Flash ear kanan (lebar,bawah)
Polygon ear = new Polygon();
ear.addPoint(1050,85);//1st
ear.addPoint(995,180);//2nd
ear.addPoint(995,136);//3rd
g.setColor(Color.yellow);
g.fillPolygon(ear);
//Flash ear2 kiri (lebar,bawah)
Polygon ear2 = new Polygon();
ear2.addPoint(770,85);//1st
ear2.addPoint(805,180);//2nd
ear2.addPoint(805,136);//3rd
g.setColor(Color.yellow);
g.fillPolygon(ear2);
/* Flash Part End */
/*Spiderman Part Start*/
Graphics2D g4 = (Graphics2D)g;
g.setColor(Color.red);
g.fillOval(800,400,200,200);
Polygon eye4 = new Polygon();
eye4.addPoint(820,500);//1st
eye4.addPoint(820,540);//2nd
eye4.addPoint(870,550);//3rd
eye4.addPoint(870,526);//4rd
g.setColor(Color.white);
g.fillPolygon(eye4);
Polygon eye5 = new Polygon();
eye5.addPoint(980,500);//1st
eye5.addPoint(980,540);//2nd
eye5.addPoint(930,550);//3rd
eye5.addPoint(930,526);//4rd
g.setColor(Color.white);
g.fillPolygon(eye5);
//String
g.setColor(Color.black);
g.drawLine(900,600,900,400);//tegak
/* Spiderman Part End */
/* Spawn Part Start */
Graphics2D g5 = (Graphics2D)g;
g.setColor(Color.black);
g.fillOval(200,350,200,200);
g.fillArc(200,300,200,325,170,200);
//left face decoration
Polygon leftDeco = new Polygon();
leftDeco.addPoint(295,465);//1st
leftDeco.addPoint(280,450);//2nd
leftDeco.addPoint(283,465);//3rd
leftDeco.addPoint(281,471);//4th
leftDeco.addPoint(240,460);//5th
leftDeco.addPoint(230,430);//6th
leftDeco.addPoint(235,410);//7th
leftDeco.addPoint(247,385);//8th
leftDeco.addPoint(235,395);//9th
leftDeco.addPoint(210,430);//10th
leftDeco.addPoint(225,470);//11th
leftDeco.addPoint(210,485);//12th
leftDeco.addPoint(245,510);//13th
leftDeco.addPoint(220,500);//14th
leftDeco.addPoint(219,510);//15th
leftDeco.addPoint(216,515);//16th
leftDeco.addPoint(260,580);//17th
leftDeco.addPoint(240,525);//18th
leftDeco.addPoint(280,500);//19th
leftDeco.addPoint(275,510);//20th
leftDeco.addPoint(295,490);//21th
leftDeco.addPoint(290,485);//22th
g.setColor(Color.white);
g.fillPolygon(leftDeco);
//right face decoration
Polygon rightDeco = new Polygon();
rightDeco.addPoint(305,465);//1st
rightDeco.addPoint(320,450);//2nd
rightDeco.addPoint(317,465);//3rd
rightDeco.addPoint(319,471);//4th
rightDeco.addPoint(360,460);//5th
rightDeco.addPoint(370,430);//6th
rightDeco.addPoint(365,410);//7th
rightDeco.addPoint(357,385);//8th
rightDeco.addPoint(365,395);//9th
rightDeco.addPoint(390,430);//10th
rightDeco.addPoint(375,470);//11th
rightDeco.addPoint(390,485);//12th
rightDeco.addPoint(355,510);//13th
rightDeco.addPoint(380,500);//14th
rightDeco.addPoint(381,510);//15th
rightDeco.addPoint(384,515);//16th
rightDeco.addPoint(340,580);//17th
rightDeco.addPoint(360,525);//18th
rightDeco.addPoint(320,500);//19th
rightDeco.addPoint(325,510);//20th
rightDeco.addPoint(305,490);//21th
rightDeco.addPoint(310,485);//22th
g.setColor(Color.white);
g.fillPolygon(rightDeco);
//left eye
Polygon leftEye = new Polygon();
leftEye.addPoint(321,487);
leftEye.addPoint(367,468);
leftEye.addPoint(363,472);
leftEye.addPoint(361,485);
leftEye.addPoint(359,487);
g.setColor(Color.green);
g.fillPolygon(leftEye);
//right eye
Polygon rightEye = new Polygon();
rightEye.addPoint(279,487);
rightEye.addPoint(233,468);
rightEye.addPoint(237,472);
rightEye.addPoint(239,485);
rightEye.addPoint(241,487);
g.setColor(Color.green);
g.fillPolygon(rightEye);
}
}
}
Вот результатом кода, когда гласил:
Это код, после того, как я добавил эффект дождя:
public class Drawing extends JFrame
{
public static void main(String []args)
{
Drawing b = new Drawing();
}
public Drawing()
{
final RPanel rPanel=new RPanel();
//JFrame frame = new JFrame("Poster");
setSize(1180,750);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().add(new MyComponent());
add(rPanel);
setVisible(true);
//background
setLayout(new BorderLayout());
JLabel background=new JLabel(new ImageIcon("J:\\1. Current Works\\CSC533\\2. project 2.0\\bg.jpg"));
add(background);
background.setLayout(new FlowLayout());
//rain
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
rPanel.stop();
System.exit(0);
}
});
}
public class MyComponent extends JComponent
{
public void paint(Graphics g)
{
/*Iron Man Part Start*/
//Iron Man
Graphics2D g2 = (Graphics2D)g;
g.setColor(Color.red);//face
g.fillOval(200,60,190,200);
//MaskKiri
Polygon mask1 = new Polygon();
mask1.addPoint(230,85);//1st
mask1.addPoint(230,200);//2nd
mask1.addPoint(260,255);//3rd
mask1.addPoint(290,255);//4rd
mask1.addPoint(290,100);//5rd
mask1.addPoint(250,100);//6rd
mask1.addPoint(250,85);//7rd
g.setColor(Color.yellow);
g.fillPolygon(mask1);
//MaskKanan
Polygon mask2 = new Polygon();
mask2.addPoint(280,100);//1st
mask2.addPoint(280,255);//2nd
mask2.addPoint(330,255);//3rd
mask2.addPoint(360,200);//4rd
mask2.addPoint(360,85);//5rd
mask2.addPoint(340,85);//6rd
mask2.addPoint(340,100);//7rd
g.setColor(Color.yellow);
g.fillPolygon(mask2);
//Iron Man Left Eye
g.setColor(Color.red);
g.fillRect(240,150,40,10);
//Iron Man Right Eye
g.setColor(Color.red);
g.fillRect(310,150,40,10);
//Iron Man Fucking Mouth
g.setColor(Color.red);
g.fillRect(255,220,80,10);
/*Iron Man Part End*/
/*Flash Part Start*/
//Flash code
Graphics2D g3 = (Graphics2D)g;
g.setColor(Color.red);//flash
g.fillOval(800,50,200,200);
//Flash eye (lebar,bawah)
Polygon eye2 = new Polygon();
eye2.addPoint(830,100);//1st
eye2.addPoint(830,140);//2nd
eye2.addPoint(870,150);//3rd
eye2.addPoint(870,126);//4rd
g.setColor(Color.white);
g.fillPolygon(eye2);
//Flash eye (lebar,bawah)
Polygon eye3 = new Polygon();
eye3.addPoint(970,100);//1st
eye3.addPoint(970,140);//2nd
eye3.addPoint(930,150);//3rd
eye3.addPoint(930,126);//4rd
g.setColor(Color.white);
g.fillPolygon(eye3);
//Flash mouth (lebar,bawah)
Polygon mouth = new Polygon();
mouth.addPoint(830,160);//1st
mouth.addPoint(830,210);//2nd
mouth.addPoint(900,230);//3rd
mouth.addPoint(900,186);//4rd
g.setColor(Color.white);
g.fillPolygon(mouth);
//Flash mouth (lebar,bawah)
Polygon mouth2 = new Polygon();
mouth2.addPoint(970,160);//1st
mouth2.addPoint(970,210);//2nd
mouth2.addPoint(900,230);//3rd
mouth2.addPoint(900,186);//4rd
g.setColor(Color.white);
g.fillPolygon(mouth2);
//Flash ear kanan (lebar,bawah)
Polygon ear = new Polygon();
ear.addPoint(1050,85);//1st
ear.addPoint(995,180);//2nd
ear.addPoint(995,136);//3rd
g.setColor(Color.yellow);
g.fillPolygon(ear);
//Flash ear2 kiri (lebar,bawah)
Polygon ear2 = new Polygon();
ear2.addPoint(770,85);//1st
ear2.addPoint(805,180);//2nd
ear2.addPoint(805,136);//3rd
g.setColor(Color.yellow);
g.fillPolygon(ear2);
/* Flash Part End */
/*Spiderman Part Start*/
Graphics2D g4 = (Graphics2D)g;
g.setColor(Color.red);
g.fillOval(800,400,200,200);
Polygon eye4 = new Polygon();
eye4.addPoint(820,500);//1st
eye4.addPoint(820,540);//2nd
eye4.addPoint(870,550);//3rd
eye4.addPoint(870,526);//4rd
g.setColor(Color.white);
g.fillPolygon(eye4);
Polygon eye5 = new Polygon();
eye5.addPoint(980,500);//1st
eye5.addPoint(980,540);//2nd
eye5.addPoint(930,550);//3rd
eye5.addPoint(930,526);//4rd
g.setColor(Color.white);
g.fillPolygon(eye5);
//String
g.setColor(Color.black);
g.drawLine(900,600,900,400);//tegak
/* Spiderman Part End */
/* Spawn Part Start */
Graphics2D g5 = (Graphics2D)g;
g.setColor(Color.black);
g.fillOval(200,350,200,200);
g.fillArc(200,300,200,325,170,200);
//left face decoration
Polygon leftDeco = new Polygon();
leftDeco.addPoint(295,465);//1st
leftDeco.addPoint(280,450);//2nd
leftDeco.addPoint(283,465);//3rd
leftDeco.addPoint(281,471);//4th
leftDeco.addPoint(240,460);//5th
leftDeco.addPoint(230,430);//6th
leftDeco.addPoint(235,410);//7th
leftDeco.addPoint(247,385);//8th
leftDeco.addPoint(235,395);//9th
leftDeco.addPoint(210,430);//10th
leftDeco.addPoint(225,470);//11th
leftDeco.addPoint(210,485);//12th
leftDeco.addPoint(245,510);//13th
leftDeco.addPoint(220,500);//14th
leftDeco.addPoint(219,510);//15th
leftDeco.addPoint(216,515);//16th
leftDeco.addPoint(260,580);//17th
leftDeco.addPoint(240,525);//18th
leftDeco.addPoint(280,500);//19th
leftDeco.addPoint(275,510);//20th
leftDeco.addPoint(295,490);//21th
leftDeco.addPoint(290,485);//22th
g.setColor(Color.white);
g.fillPolygon(leftDeco);
//right face decoration
Polygon rightDeco = new Polygon();
rightDeco.addPoint(305,465);//1st
rightDeco.addPoint(320,450);//2nd
rightDeco.addPoint(317,465);//3rd
rightDeco.addPoint(319,471);//4th
rightDeco.addPoint(360,460);//5th
rightDeco.addPoint(370,430);//6th
rightDeco.addPoint(365,410);//7th
rightDeco.addPoint(357,385);//8th
rightDeco.addPoint(365,395);//9th
rightDeco.addPoint(390,430);//10th
rightDeco.addPoint(375,470);//11th
rightDeco.addPoint(390,485);//12th
rightDeco.addPoint(355,510);//13th
rightDeco.addPoint(380,500);//14th
rightDeco.addPoint(381,510);//15th
rightDeco.addPoint(384,515);//16th
rightDeco.addPoint(340,580);//17th
rightDeco.addPoint(360,525);//18th
rightDeco.addPoint(320,500);//19th
rightDeco.addPoint(325,510);//20th
rightDeco.addPoint(305,490);//21th
rightDeco.addPoint(310,485);//22th
g.setColor(Color.white);
g.fillPolygon(rightDeco);
//left eye
Polygon leftEye = new Polygon();
leftEye.addPoint(321,487);
leftEye.addPoint(367,468);
leftEye.addPoint(363,472);
leftEye.addPoint(361,485);
leftEye.addPoint(359,487);
g.setColor(Color.green);
g.fillPolygon(leftEye);
//right eye
Polygon rightEye = new Polygon();
rightEye.addPoint(279,487);
rightEye.addPoint(233,468);
rightEye.addPoint(237,472);
rightEye.addPoint(239,485);
rightEye.addPoint(241,487);
g.setColor(Color.green);
g.fillPolygon(rightEye);
}
}
}
class RPanel extends JPanel {
//*********SETTINGS****************************
//private float mWind = 2.05f;
//private float mGravity = 9.8f;
private float mWind = 0.55f;
private float mGravity = 1.4f;
private double mRainChance = 0.99; // from 0 to 1
private int mRepaintTimeMS = 16;
private float mRainWidth=1;
//private double mDdropInitialVelocity = 20;
private double mDdropInitialVelocity = 10;
private double mDropDiam = 2;
private Color mColor=new Color(255, 100, 50);
//*********************************************
private ArrayList<Rain> rainV;
private ArrayList<Drop> dropV;
private UpdateThread mUpdateThread;
public RPanel() {
rainV = new ArrayList<Rain>();
dropV = new ArrayList<Drop>();
mUpdateThread=new UpdateThread();
mUpdateThread.start();
}
public void stop() {
mUpdateThread.stopped=true;
}
public int getHeight() {
return this.getSize().height;
}
public int getWidth() {
return this.getSize().width;
}
private class UpdateThread extends Thread {
public volatile boolean stopped=false;
@Override
public void run() {
while (!stopped) {
RPanel.this.repaint();
try {
Thread.sleep(mRepaintTimeMS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(mRainWidth));
g2.setColor(mColor);
//DRAW DROPS
Iterator<Drop> iterator2 = dropV.iterator();
while (iterator2.hasNext()) {
Drop drop = iterator2.next();
drop.update();
drop.draw(g2);
if (drop.y >= getHeight()) {
iterator2.remove();
}
}
//DRAW RAIN
Iterator<Rain> iterator = rainV.iterator();
while (iterator.hasNext()) {
Rain rain = iterator.next();
rain.update();
rain.draw(g2);
if (rain.y >= getHeight()) {
//create new drops (2-8)
long dropCount = 1 + Math.round(Math.random() * 4);
for (int i = 0; i < dropCount; i++) {
dropV.add(new Drop(rain.x, getHeight()));
}
iterator.remove();
}
}
//CREATE NEW RAIN
if (Math.random() < mRainChance) {
rainV.add(new Rain());
}
}
//*****************************************
class Rain {
float x;
float y;
float prevX;
float prevY;
public Rain() {
Random r = new Random();
x = r.nextInt(getWidth());
y = 0;
}
public void update() {
prevX = x;
prevY = y;
x += mWind;
y += mGravity;
}
public void draw(Graphics2D g2) {
Line2D line = new Line2D.Double(x, y, prevX, prevY);
g2.draw(line);
}
}
//*****************************************
private class Drop {
double x0;
double y0;
double v0; //initial velocity
double t; //time
double angle;
double x;
double y;
public Drop(double x0, double y0) {
super();
this.x0 = x0;
this.y0 = y0;
v0 = mDdropInitialVelocity;
angle = Math.toRadians(Math.round(Math.random() * 180)); //from 0 - 180 degrees
}
private void update() {
// double g=10;
t += mRepaintTimeMS/100f;
x = x0 + v0 * t * Math.cos(angle);
y = y0 - (v0 * t * Math.sin(angle) - mGravity * t * t/2);
}
public void draw(Graphics2D g2) {
Ellipse2D.Double circle = new Ellipse2D.Double(x, y, mDropDiam, mDropDiam);
g2.fill(circle);
}
}
}
выход я форме это:
Проблема, которую я имею после добавления эффекта дождя является то, что панель, которую я называю от дождя покрывает мой фон. Я внедрил код дождя и не очень понял. Я почти уверен, что мне нужно что-то изменить где-то внутри.
Вопрос в том, как я могу сделать дождь с изображением в качестве фона. Компоненты/супергерои могут быть за дожде или перед ним, в зависимости от того, что на самом деле легко.
Надеюсь, я подготовил достаточно, хотя это не точно, потому что я не знаю проблему конкретно. Большое спасибо!
Стеклянная панель не работает, не так ли, потому что там была переопределенная paintComponent ниже, где RPanel расширяет JPanel? – wsssixteen
Я проверил его против кода, который вы предоставили. Это изменилось с тех пор, как вы разместили его? – teppic
Нет. Я просто пытался использовать тот же код, который я опубликовал, чтобы быть уверенным. Вы что-то изменили в 'public Drawing()'? – wsssixteen