0

欢迎)有一点麻烦,请帮忙解决。这是代码:

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JComponent;
import javax.swing.JFrame;

class MyCanvas extends JComponent {

  public void paint(Graphics g) {
    Image img1 = Toolkit.getDefaultToolkit().getImage("yourFile.gif");

    int width = img1.getWidth(this);
    int height = img1.getHeight(this);

    int scale = 2;
    int w = scale * width;
    int h = scale * height;
    // explicitly specify width (w) and height (h)
    g.drawImage(img1, 10, 10, (int) w, (int) h, this);

  }
}

public class Graphics2DDrawScaleImage {
  public static void main(String[] a) {
    JFrame window = new JFrame();
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setBounds(30, 30, 300, 300);
    window.getContentPane().add(new MyCanvas());
    window.setVisible(true);
  }
}

如果我们运行代码,我们已经显示了一张图片。但我的任务是带来许多相同但在不同位置的图片。怎么做?)

如果你这样做:

for(int i = 0; i < 500 ; i+=100){
g.drawImage(img1, 10+i, 10, (int) w, (int) h, this);
}

然后图像连续显示。我想要更多随机

4

3 回答 3

2

我想要更随机的

使用Random该类生成指定范围内的整数。您可能希望使用getWidth()getHeight()获取组件的边界,以便指定一个实际的范围。然后你可以随机化 x, y 值。

Random random = new Random();
int x = random(getWidth());
int y = random(getHeight();

您可能还需要考虑图像的宽度/高度,以确保它们完全包含在面板中。

此外,自定义绘画是通过覆盖paintComponent(...)方法而不是 paint() 方法来完成的。

于 2013-10-31T16:06:44.407 回答
1

您确实是正确的,您可以通过调用多次绘制相同的图像

g.drawImage(img1, x, y, (int) w, (int) h, this);

对于 x 和 y 的不同值多次。所以,基本上你需要做的是随机化坐标。这可以通过使用RandomJava 中的方便类来完成:

Random random = new Random();
int x = random.nextInt(300);
int y = random.nextInt(300);

这将在 (0, 0) 和 (299, 299) 之间生成随机坐标。

于 2013-10-31T16:07:31.933 回答
1

您可以使用随机:

Random rand = new Random();

for(int i = 0; i < 500 ; i+=100){
    g.drawImage(img1, rand.nextInt(300), rand.nextInt(300), (int) w, (int) h, this);
}
于 2013-10-31T16:08:11.167 回答