Java 仅绘制一次图像,无需重新绘制
我用java编写了简单的动画,再次调用了Java 仅绘制一次图像,无需重新绘制,java,swing,animation,graphics,paintcomponent,Java,Swing,Animation,Graphics,Paintcomponent,我用java编写了简单的动画,再次调用了paintComponent(Graphics g)方法 问题是,我在背景中画的画是随机生成的。因此每次调用repaint()时,它都会更改 它是通过绘制矩形生成的,所以我需要图形处理程序 我怎样才能解决这个问题 public void paintComponent(Graphics g) { landscape = new Landscape(g); // landscape - attribute //... } 因此多次调用构造函数:
paintComponent(Graphics g)
方法
问题是,我在背景中画的画是随机生成的。因此每次调用repaint()
时,它都会更改
它是通过绘制矩形生成的,所以我需要图形处理程序
我怎样才能解决这个问题
public void paintComponent(Graphics g)
{
landscape = new Landscape(g); // landscape - attribute
//...
}
因此多次调用构造函数:
public class Landscape
{
public Landscape(Graphics g)
{
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(new Color(92, 163, 99));
Random rand = new Random();
int first = rand.nextInt((800 - 1) + 1) + 1;
g2d.fillRect(0, 800 - first, 1, first);
int d = first % 2;
if(d == 0) d = -1;
for(int i = 1; i <= 800; i++) {
int choose = rand.nextInt((1000 - 1) + 1) + 1;
if(choose > 950) {
d = -(d);
}
if(d == -1) {
first += 1;
} else {
first -= 1;
}
g2d.fillRect(i, 800 - first, 1, first);
}
}
} // End Landscape
公共类景观
{
公共景观(图g)
{
Graphics2D g2d=(Graphics2D)g;
g2d.setColor(新颜色(92163,99));
Random rand=新的Random();
int first=rand.nextInt((800-1)+1)+1;
g2d.fillRect(0800-first,1,first);
int d=第一个%2;
如果(d==0)d=-1;
对于(int i=1;i 950){
d=-(d);
}
如果(d==-1){
第一+=1;
}否则{
第一-=1;
}
g2d.fillRect(i,800-first,1,first);
}
}
}//末端景观
每次所有点都改变。将矩形的构造与矩形的绘制分开 在构造函数中构造矩形,并在draw方法中绘制矩形 这是你的景观课,重新安排
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Landscape {
List<Rectangle> rectangles;
public Landscape() {
rectangles = new ArrayList<Rectangle>();
Random rand = new Random();
int first = rand.nextInt((800 - 1) + 1) + 1;
rectangles.add(new Rectangle(0, 800 - first, 1, first));
int d = first % 2;
if (d == 0)
d = -1;
for (int i = 1; i <= 800; i++) {
int choose = rand.nextInt((1000 - 1) + 1) + 1;
if (choose > 950) {
d = -(d);
}
if (d == -1) {
first += 1;
} else {
first -= 1;
}
rectangles.add(new Rectangle(i, 800 - first, 1, first));
}
}
public void draw(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(new Color(92, 163, 99));
for (Rectangle r : rectangles) {
g2d.fillRect(r.x, r.y, r.width, r.height);
}
}
} // End Landscape
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Rectangle;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Random;
公共类景观{
列表矩形;
公共景观(){
矩形=新的ArrayList();
Random rand=新的Random();
int first=rand.nextInt((800-1)+1)+1;
添加(新的矩形(0800-第一个,1,第一个));
int d=第一个%2;
如果(d==0)
d=-1;
对于(int i=1;i 950){
d=-(d);
}
如果(d==-1){
第一+=1;
}否则{
第一-=1;
}
添加(新的矩形(i,800-first,1,first));
}
}
公共空间绘制(图g){
Graphics2D g2d=(Graphics2D)g;
g2d.setColor(新颜色(92163,99));
用于(矩形r:矩形){
g2d.fillRect(r.x,r.y,r.宽度,r.高度);
}
}
}//末端景观
将矩形的构造与矩形的绘图分开
在构造函数中构造矩形,并在draw方法中绘制矩形
这是你的景观课,重新安排
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Landscape {
List<Rectangle> rectangles;
public Landscape() {
rectangles = new ArrayList<Rectangle>();
Random rand = new Random();
int first = rand.nextInt((800 - 1) + 1) + 1;
rectangles.add(new Rectangle(0, 800 - first, 1, first));
int d = first % 2;
if (d == 0)
d = -1;
for (int i = 1; i <= 800; i++) {
int choose = rand.nextInt((1000 - 1) + 1) + 1;
if (choose > 950) {
d = -(d);
}
if (d == -1) {
first += 1;
} else {
first -= 1;
}
rectangles.add(new Rectangle(i, 800 - first, 1, first));
}
}
public void draw(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(new Color(92, 163, 99));
for (Rectangle r : rectangles) {
g2d.fillRect(r.x, r.y, r.width, r.height);
}
}
} // End Landscape
导入java.awt.Color;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.Rectangle;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Random;
公共类景观{
列表矩形;
公共景观(){
矩形=新的ArrayList();
Random rand=新的Random();
int first=rand.nextInt((800-1)+1)+1;
添加(新的矩形(0800-第一个,1,第一个));
int d=第一个%2;
如果(d==0)
d=-1;
对于(int i=1;i 950){
d=-(d);
}
如果(d==-1){
第一+=1;
}否则{
第一-=1;
}
添加(新的矩形(i,800-first,1,first));
}
}
公共空间绘制(图g){
Graphics2D g2d=(Graphics2D)g;
g2d.setColor(新颜色(92163,99));
用于(矩形r:矩形){
g2d.fillRect(r.x,r.y,r.宽度,r.高度);
}
}
}//末端景观
发布您的课程代码。所以我们可以帮你。布尔标志不起作用。这幅画根本没出现。你怎么试过的?private int a=0;然后如果(a==0){scape=new scape(g);a=1;}println在if中只工作一次,那么它应该工作……但是它不会显示任何东西发布类代码。所以我们可以帮你。布尔标志不起作用。这幅画根本没出现。你怎么试过的?private int a=0;然后如果(a==0){scape=new scape(g);a=1;}println在if中只工作一次,那么它应该工作……但它不显示任何内容,或者同样地,将背景渲染为BufferedImage
并在draw
方法中简单地将其绘制为idea@MadProgrammer或在JLabel
中显示该图像,并在图像更改时调用label.repaint()
。或者,同样地,将背景渲染为buffereImage
并简单地使用draw
方法将其绘制为idea@MadProgrammer或在JLabel
中显示该图像,并在图像更改时调用label.repaint()
。