2010-05-04 9 views
2

은 현재 작업이 끝난 이래로 프로젝트를 변경했습니다. 좀. 이미지가 여전히 변경되지 않습니다.처분되거나 보이지 않는 것으로 설정되는 자바

package icnon; 

import javax.imageio.*; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class FrameIconExample extends JFrame implements ActionListener { 

    JLabel j; 
    JPanel p, l, k; 
    JButton picOne, picTwo; 
    Container cPane; 

    public FrameIconExample() { 
     JButton picOne = new JButton("picOne"); 
     JButton picTwo = new JButton("picTwo"); 
     picOne.setName("picOne"); 
     picTwo.setName("picTwo"); 

     picOne.addActionListener(this); 
     picTwo.addActionListener(this); 

     p = new JPanel(new GridLayout(2, 1)); 
     l = new JPanel(new FlowLayout()); 
     k = new JPanel(new FlowLayout()); 

     cPane = getContentPane(); 

     j = new JLabel(new ImageIcon(
      "../meet/src/images/beautiful-closeup-portrait-photography.jpg")); 

     l.add(j); 
     k.add(picOne); 
     k.add(picTwo); 
     p.add(l); 
     p.add(k); 

     add(p); 
    } 

    public static void main(String[] args) { 
     FrameIconExample frame = new FrameIconExample(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.setSize(new Dimension(300, 800)); 
     frame.setTitle("Frame Icon Example"); 

     // Display the form 
     frame.setVisible(true); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     JButton temp = (JButton) e.getSource(); 
     String src = "../meet/src/images/Majken Kruse portrait - john.jpg"; 

     //System.out.println(src + " " + temp.getName()); 

     if (temp.getName().equalsIgnoreCase("picOne")) { 
      try { 

       l.hide(); 

       try { 

        src = "../meet/src/images/beautiful-closeup-portrait-photography.jpg"; 
        System.out.println(src + " " + temp.getName()); 
        Icon img; 
        j = new JLabel(new ImageIcon(src)); 

        l.add(j); 

        System.out.println("1"); 
       } catch (Exception q) { 
        q.printStackTrace(); 
       } 

       if (temp.getName().equalsIgnoreCase("picTwo")) { 
        src = "../icontest/images/Majken Kruse portrait - john.jpg"; 
        System.out.println(src + " " + temp.getName()); 
        Icon img; 
        j = new JLabel(new ImageIcon(src)); 
        l.add(j); 
        System.out.println("2"); 
       } 
      } catch (Exception x) { 
       x.printStackTrace(); 
      } 
     } 
    } 
} 

잘못된 들여 쓰기. 메신저 꽤 확실한 방법 l.add (j); 이미지가 변하지 않는 이유입니다.

어떤 아이디어일까요?

+2

스택 추적을 질문에 포함 할 수 있으면 도움이됩니다. – coobird

+0

매우 큰 것 그러나 ok. 그 null 포인터 예외 – OVERTONE

+0

오히려 새로운 질문을하십시오. 질문의 전체적인 의미를 편집하면 답변이 더 이상 적합하지 않습니다. 이전 버전으로 롤백하고 "예외 수정"상황을 다시 듣기 위해 제목을 변경하고 지금 다른 질문에서 작성한 내용을 묻는 것이 좋습니다. – Gnoupi

답변

6

참고 :이 대답은 질문의 개정판 1과 2에 대해 작성되었습니다.

이것은 Awt 오류가 아니며 NullPointerException입니다.

당신이 만든다고 생각한 순간에 당신은 실제로 그것을 지역 변수로 가려서 필드 l이 null입니다.

JPanel p = new JPanel(new GridLayout(2, 1)); 
JPanel l = new JPanel(new FlowLayout()); 
JPanel k = new JPanel(new FlowLayout()); 

은 다음과 같아야합니다

p = new JPanel(new GridLayout(2, 1)); 
l = new JPanel(new FlowLayout()); 
k = new JPanel(new FlowLayout()); 

읽기 다시 오류, 스택 추적과 함께. 어떤 행이 문제인지를 알려주고, 오류의 유형은 발생한 상황을 알려줍니다 (이 경우).

+0

그랬 잖아! 오류 없음. 불행히도 이미지는 여전히 바뀌지 만 감사합니다. – OVERTONE

+0

@OVERTONE - JLabel에는 "setIcon"메서드가 있습니다. 원하는 이미지가 표시되도록 변경하는 경우 JLabel에서 setIcon()을 호출하면됩니다. 현재, 새 JLabel을 패널에 추가하려고합니다. 원하는 경우 새 이미지를 추가하고 변경하지 말고 패널에서 유효성 다시 검사를 호출해야합니다. – Gnoupi

+0

세트 아이 콘이었습니다. 나는 setIon (src)이 setIcon (img) 여야했음을 고맙다. – OVERTONE

1

올바른 이미지 위치를 설정하지 않았다고 가정합니다. 이미지가 사용자가 지정한 정확한 위치에 있는지 확인하십시오. 어떤 IDE를 사용하고 있습니까? Eclipse를 사용하는 경우 프로젝트를 새로 고치는 것이 도움이 될 수 있습니다.

+0

예. 이미지는 괜찮습니다. 그들은 올바른 위치에 있습니다. 새로 고침이란 무엇입니까? – OVERTONE

+1

프로젝트 탐색기로 가서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 "새로 고침"을 누르십시오. 작업 공간에 새 파일이 저장되어 있으면 Eclipse에서 새로 고침이 필요합니다. – Ham

2

당신이 겪고있는 문제는 당신이 l라는 이름의 글로벌 JPanel를 선언,하지만 당신은 당신의 생성자 JPanel의 인스턴스를 할 때 다음, 당신은 선언하고 l라는 이름의 로컬 범위 JPanel을 할당 할 것입니다. actionPerformed에 구성 요소를 추가하려고하면이를 null 전역 변수에 추가하려고합니다.

관련 문제