2010-02-09 5 views
5

JFrame을 사용하고 있으며 프레임에 배경 이미지를 보관했습니다. 이제 문제는 이미지의 크기가 프레임의 크기보다 작아서 같은 창을 빈 곳에서 다시 유지해야한다는 것입니다. 사용자가 최대화 버튼을 클릭하면 런타임에 프레임의 빈 영역에 이미지를 놓아야 할 수 있습니다. 아무도 이것을 수행하는 방법을 말해 줄 수 있습니까? 대신 배경 이미지를 여러 번 사용하는 경우자바 스윙 배경 이미지

+2

"내가 빈 부분에 다시 한 번 같은 이미지를 계속해야"아무튼

이 프로그램은 모두의 예를 가지고 나에게 의미가 없다. 당신이 갖고있는 것과 원하는 것을 가지고 이미지를 만들 수 있습니까? –

답변

1

Windows 바탕 화면의 배경 이미지 같은 것을 원하는 크기를 조정하거나 그것을 중심으로 표시 할?

는 한 번만 이미지를 유지하고 단지의 paintComponent 방법에 여러 번 칠해야합니다.

+0

이것에 대한 예제 코드를 줄 수 있습니까? 당신이 가지고 있다면. 그것은 나에게 큰 도움이 될 것입니다. 부디? – Nilesh

+0

이미지의 품질을 유지하기 위해, 어떻게 타일 이미지에 대한 권장 사항이 대신 그것을 스트레칭 않습니다 ... 응답의 작업에 대한 –

12

당신이 원하는 행동 명확하지 비록 당신이 기지개 대 바둑판에 대해 얘기처럼 들린다. 타일에

import java.awt.BorderLayout; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.event.ActionEvent; 
import java.io.IOException; 
import java.net.URL; 

import javax.imageio.ImageIO; 
import javax.swing.AbstractAction; 
import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Main { 
    public static void main(String[] args) throws IOException { 
     final Image image = ImageIO.read(new URL("http://sstatic.net/so/img/logo.png")); 
     final JFrame frame = new JFrame(); 
     frame.add(new ImagePanel(image)); 
     frame.setSize(800, 600); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 

@SuppressWarnings("serial") 
class ImagePanel extends JPanel { 
    private Image image; 
    private boolean tile; 

    ImagePanel(Image image) { 
     this.image = image; 
     this.tile = false; 
     final JCheckBox checkBox = new JCheckBox(); 
     checkBox.setAction(new AbstractAction("Tile") { 
      public void actionPerformed(ActionEvent e) { 
       tile = checkBox.isSelected(); 
       repaint(); 
      } 
     }); 
     add(checkBox, BorderLayout.SOUTH); 
    }; 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     if (tile) { 
      int iw = image.getWidth(this); 
      int ih = image.getHeight(this); 
      if (iw > 0 && ih > 0) { 
       for (int x = 0; x < getWidth(); x += iw) { 
        for (int y = 0; y < getHeight(); y += ih) { 
         g.drawImage(image, x, y, iw, ih, this); 
        } 
       } 
      } 
     } else { 
      g.drawImage(image, 0, 0, getWidth(), getHeight(), this); 
     } 
    } 
} 
+1

많이 감사의 예를 참조하십시오? – Nilesh

+0

안녕을 finnw – NumenorForLife

0

또 다른 방법 이미지가 TexturePaint 함께 :

public class TexturePanel extends JPanel { 

    private TexturePaint paint; 

    public TexturePanel(BufferedImage bi) { 
     super(); 
     this.paint = new TexturePaint(bi, new Rectangle(0, 0, bi.getWidth(), bi.getHeight())); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     Graphics2D g2 = (Graphics2D) g; 
     g2.setPaint(paint); 
     g2.fill(new Rectangle(0, 0, getWidth(), getHeight())); 
    } 
}