나는이 JPanel의 나는 즉시 생성 할 것을 JPEG 및 PNG 이미지를 추가하고 싶은에 있습니다.
지금까지 Swing Tutorials 에서 본 모든 예제 , 특히 Swing 예제 에서는 ImageIcon
s를 사용 합니다.
이 이미지를 바이트 배열로 생성하고 있으며 일반적으로 640×480에서 예제에서 사용하는 공통 아이콘보다 큽니다.
- ImageIcon 클래스를 사용하여 JPanel에 해당 크기의 이미지를 표시 할 때 (성능 또는 기타) 문제가 있습니까?
- 일반적인 방법은 무엇입니까 ?
- ImageIcon 클래스를 사용하지 않고 JPanel에 이미지를 추가하는 방법은 무엇입니까?
편집 : 자습서 및 API를 자세히 살펴보면 ImagePacon을 JPanel에 직접 추가 할 수 없음을 알 수 있습니다. 대신 이미지를 JLabel의 아이콘으로 설정하여 동일한 효과를 얻습니다. 이건 그냥 기분이 좋지 않아 …
답변
내가하는 방법은 다음과 같습니다 (이미지를로드하는 방법에 대한 정보가 조금 더 있습니다).
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class ImagePanel extends JPanel{
private BufferedImage image;
public ImagePanel() {
try {
image = ImageIO.read(new File("image name and path"));
} catch (IOException ex) {
// handle exception...
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, this); // see javadoc for more info on the parameters
}
}
답변
JPanel을 사용하는 경우 아마도 Swing으로 작업하고있을 것입니다. 이 시도:
BufferedImage myPicture = ImageIO.read(new File("path-to-file"));
JLabel picLabel = new JLabel(new ImageIcon(myPicture));
add(picLabel);
이미지는 이제 스윙 구성 요소입니다. 다른 구성 요소와 마찬가지로 레이아웃 조건이 적용됩니다.
답변
프레드 하 슬람의 방식은 잘 작동합니다. 항아리 내에서 이미지를 참조하고 싶기 때문에 파일 경로에 문제가있었습니다. 이를 위해 다음을 사용했습니다.
BufferedImage wPic = ImageIO.read(this.getClass().getResource("snow.png"));
JLabel wIcon = new JLabel(new ImageIcon(wPic));
이 방법을 사용하여로드 해야하는 유한 번호 (약 10 개)의 이미지 만 가지고 있기 때문에 잘 작동합니다. 올바른 상대 파일 경로가 없어도 파일을 가져옵니다.
답변
나는 아무것도 서브 클래스 할 필요가 없다고 생각합니다. Jlabel을 사용하십시오. 이미지를 Jlabel로 설정할 수 있습니다. 따라서 Jlabel의 크기를 조정 한 다음 이미지로 채우십시오. 괜찮아. 이것이 내가하는 방식입니다.
답변
답변
JLabel imgLabel = new JLabel(new ImageIcon("path_to_image.png"));
답변
JPanel을 서브 클래 싱 할 수 있습니다. 다음은 ImagePanel에서 추출한 것입니다. 이미지는 위 / 왼쪽, 위 / 오른쪽, 중간 / 중간, 아래쪽 / 왼쪽 또는 아래쪽 / 오른쪽의 5 개 위치 중 하나에 이미지를 배치합니다.
protected void paintComponent(Graphics gc) {
super.paintComponent(gc);
Dimension cs=getSize(); // component size
gc=gc.create();
gc.clipRect(insets.left,insets.top,(cs.width-insets.left-insets.right),(cs.height-insets.top-insets.bottom));
if(mmImage!=null) { gc.drawImage(mmImage,(((cs.width-mmSize.width)/2) +mmHrzShift),(((cs.height-mmSize.height)/2) +mmVrtShift),null); }
if(tlImage!=null) { gc.drawImage(tlImage,(insets.left +tlHrzShift),(insets.top +tlVrtShift),null); }
if(trImage!=null) { gc.drawImage(trImage,(cs.width-insets.right-trSize.width+trHrzShift),(insets.top +trVrtShift),null); }
if(blImage!=null) { gc.drawImage(blImage,(insets.left +blHrzShift),(cs.height-insets.bottom-blSize.height+blVrtShift),null); }
if(brImage!=null) { gc.drawImage(brImage,(cs.width-insets.right-brSize.width+brHrzShift),(cs.height-insets.bottom-brSize.height+brVrtShift),null); }
}