2009-11-06 2 views
3

이미지를 보여주는 패널에 JScrollPane의 추가하지만 난 .. 그것을 스크롤을 추가 할 수 아니에요이 내 코드내가 apanel ..에 이미지를 표시하기위한이 작은 프로그램이

클래스입니다

public class ShowPanel extends JPanel{ 

public ShowPanel(BufferedImage image, int height, int width) { 
    this.image = image; 
    this.height = height; 
    this.width = width; 
    //this.setBounds(width, width, width, height); 

} 

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawImage(image, height, width, null); 
} 

public void setImage(BufferedImage image, int height, int width) { 
    this.image = image; 
    this.height = height; 
    this.width = width; 

} 

private BufferedImage image; 
private int height; 
private int width; 

}

하고 보여주는 패널 개최 imageContainer라는 또 다른 패널이 메인 프레임의 샘플 :

public class MainFrame extends javax.swing.JFrame { 

/** Creates new form MainFrame */ 
public MainFrame() { 
    initComponents(); 
    image = null; 
    path = "PantherOnLadder.gif"; 
    image = Actions.loadImage(path); 
    showPanel = new ShowPanel(image, 0, 0); 
    spY = toolBar.getY() + toolBar.getHeight(); 
    showPanel.setBounds(0, spY, image.getWidth(), image.getHeight()); 
    showPanel.repaint(); 
    imageContainer.add(showPanel); 
    JScrollPane scroller = new JScrollPane(imageContainer); 
    scroller.setAutoscrolls(true); 


} 
를 이미지를 보여 JPanel의 확장

내가 여기서 한 실수는 무엇입니까?

답변

6

스크롤 막대에 추가 된 구성 요소의 기본 크기 이 스크롤 창 크기를 초과하면 스크롤 막대가 자동으로 나타납니다. 스크롤 막대가 나타나지 않도록 사용자 정의 패널에 원하는 크기가 없습니다. 한 가지 해결책은 이미지의 크기와 같은 기본 크기를 반환하는 것입니다.

물론 사람들이 이런 종류의 사용자 정의 그림을 그리는 데 모든 어려움을 겪는 이유는 결코 알지 못합니다. 커스텀 클래스는 필요 없다. 단지 BufferedImage로부터 ImageIcon을 생성하고 아이콘을 JLable에 추가 한 다음 스크롤 판에 레이블을 추가하면 이러한 문제가 발생하지 않습니다. 사용자 정의 페인팅을 수행하는 유일한 이유는 이미지의 크기를 조정하거나 다른 멋진 효과를 제공해야하는 경우입니다.

+0

감사합니다 .. 잘 이미지도 – CiCi

+0

에 scalnig 및 ather 것들을 할 것이지만 스케일링조차도 JLabel의 "paint"메소드를 오버라이드하여 처리 할 수 ​​있습니다 – aperkins

1

'imagecontainer'는 스크롤 가능한 패널에 추가되는 클래스이므로 스크롤 할 수 있도록 특정 크기를 초과해야하는 패널입니다. 'showPanel'을 심벌 형 컨테이너에 직접 배치해야합니다.

+0

이렇게 코드를 작성하는 것이 옳은가요? JScrollPane scroller = 새로운 JScrollPane (showPanel); scroller.setPreferredSize (새 Dimension (image.getWidth(), image.getHeight())); imageContainer.add (showPanel); 하지만 아직 이미지가 보이지 않고 있어도 여전히 gettig입니다! – CiCi

관련 문제