相信大家都知道在web开发中,css有一个样式就是repeat背景图片的:background-repeat 属性设置是否及如何重复背景图像。默认地,背景图像在水平和垂直方向上重复。
body
  {
  background-image: url(stars.gif);
  background-repeat: repeat-x;
  }
我现在想在JFrame上做类似的操作,如何实现?首先JFrame里面是没办法绘图的,只能在JFrame的ContentPane里面绘图,我自定义一个JPanel,覆盖paintComponent方法,在里面绘制背景,再把它设置为JFrame的ContentPane,关键是我看了Graphics的API,没有直接x轴或y轴重复绘制的方法。难道要我去计算frame的宽度,然后循环去drawImage(Image img, int x, int y, ImageObserver observer) ??

解决方案 »

  1.   

    我的代码:
    JPanel panel = new JPanel() {
    public void paintComponent(Graphics g) { Image imgBg = new ImageIcon("./Resource/bg.gif").getImage();
    for (int i = 0, x = 0, y = 0; i <= Mainframe.WIDTH / imgBg.getWidth(null) + 1; i++) {
    g.drawImage(imgBg, x, y, imgBg.getWidth(null), getHeight(), null);
    x += imgBg.getWidth(null);
    } }
    };
      

  2.   

    JDK没有提供直接的绘图API吧,需要用第三方jar包
      

  3.   

    汗 让它自动延生去画就行了啊
    g.drawImage(imgBg, x, y, getWidth(), getHeight(), null);
    就行啊,不用循环画
      

  4.   


    那是拉伸还是延伸?
    我的需求是沿着x轴repeat啊。
      

  5.   

    想延伸的重复画就用 TexturePaint 
    TexturePaint 要用 BufferedImage 来填充Graphics2D g2d = (Graphics2D) g;
    g2d.setPaint(new TexturePaint(buffImage, new Rectangle2D.Float(
    0, 0, buffImage.getWidth(), buffImage.getHeight())));
    g2d.fillRect(0, 0, this.getWidth(), buffImage.getHeight());