2013-06-14 2 views
0


JPanel 안에 JLabel (ImageIcon 포함) 및 사용자 정의 ImagePanel이있는 애플릿이 있습니다. 몇 가지 이유로 JLabel은 처음에는 Mac OS X에서 사파리와 파이어 폭스에 나타나지 않지만 다른 OS (윈도우, 리눅스)에서는 괜찮습니다. 이제 동일한 애플릿에서 이미지를 다른 이미지로 넘기는 버튼이 있습니다. mac os의 safari/firefox에서 버튼을 클릭하면 두 번째 이미지가 표시되고 다시 클릭하면 첫 번째 이미지가 나타납니다 !! 이 문제의 원인은 무엇입니까? Windows 용 사파리에서도 애플릿은 정상적으로 작동합니다. 즉 첫 번째 이미지가로드되어 표시됩니다.Jappel이 사파리에 나타나지 않습니다.

어떤 도움을 주시면 감사하겠습니다

private void flipImage() 
    { 
     label.setIcon(new ImageIcon(backImg)); 
     label.repaint(); 
     lcdpanel.setVisible(false); 
     lcdpanel.repaint(); 
     mainpanel.repaint(); 
     this.repaint(); 
    } 

UI 코드

public void createUI(){ 
    mainpanel = new JPanel(); 
    mainpanel.setMaximumSize(new Dimension(154, 212)); 
    mainpanel.setMinimumSize(new Dimension(154, 212)); 
    mainpanel.setName("mainPanel"); 
    mainpanel.setLayout(new BorderLayout()); 

    lcdpanel = new ImagePanel(bgLcdImage); 
    lcdpanel.setBounds(22, 22, 110, 28); 

    bgImage = Toolkit.getDefaultToolkit().createImage(bytes);//BufferedImage 
    label = new JLabel(new ImageIcon(bgImage)); 

    mainpanel.add(lcdpanel); 
    mainpanel.add(label); 
    mainpanel.invalidate(); 

    getContentPane().add(mainpanel); 
    repaint(); 
    } 

버튼 클릭 코드입니다.
감사

+0

애플릿이로드 될 때 'lcdPanel'과'JLabel'을 모두 화면에 표시 하시겠습니까? 'setBounds'는'Jpanel'이 디폴트'FlowLayout'을 사용하고 있기 때문에 작동하지 않을 것입니다. 그리고'setBounds'는 나쁜 연습이지만 컨테이너의 레이아웃이'null'으로 설정된 경우에만 작동합니다 .. –

+0

예 두 가지 모두 표시하고 싶습니다. 둘 다 Windows/Linux에서 실행하지만 Mac OS 브라우저에서는 수행하지 마십시오. – user681443

+0

어디에서'JLabel '을 표시 하시겠습니까? –

답변

2

는 난하는 imagepanel로의 JLabel을 만들어 JPanel의 레이아웃은 당신이 할 수있는 최악의 일이 null로 레이아웃을 설정

를 null로 설정합니다. 그것은 일반적으로 문제를 푸는 것보다 더 많은 문제를 일으킬 것입니다.

문제점은 jlabel이 표시되지만 Mac OS X firefox/safari 브라우저에 표시되지 않는 이유는 Windows/Linux firefox/safari 브라우저에 표시됩니다.

몇 줄의 코드 만 게시되는 것을 어떻게 알 수 있습니까? 문제가 발생하면 SSCCE을 게시하십시오.

mac os의 safari/firefox에서 버튼을 클릭하면 두 번째 이미지가 표시되고 다시 클릭하면 첫 번째 이미지가 나타납니다 !!

panel.add(...); 
panel.revalidate(); 
panel.repaint(); // sometimes needed 

당신은 당신이 구성 요소의 속성을 변경할 때 다시 그리기를 호출 할 필요가 없습니다 :

눈에 보이는 GUI에 구성 요소를 추가/제거 일반적인 형식은하는 것입니다. 스윙은 당신을 위해 페인트 칠하기에 충분히 똑똑합니다.

label.setIcon(new ImageIcon(backImg)); 
//label.repaint(); 
관련 문제