2011-03-17 4 views
0

JFrame을 확장하는 클래스가 있으며 두 개의 Jpanel을 상태 표시 줄 JPanel과 contentDisplay 패널 중 하나에 압축합니다.JFrame에 상태 표시 줄을 추가 할 때 발생하는 문제

contentDisplay 패널의 변경 사항을 바탕으로 상태 표시 줄 Jpanel의 레이블 텍스트를 동적으로 변경해야합니다. 이를 위해 다음 코드로 statusbar Panel에 대한 별도의 클래스를 만들었습니다.

public class StatusBar extends JPanel { 
    JLabel status; 
    /** Creates a new instance of StatusBar */ 
    public StatusBar() { 
     super(); 
     status = new JLabel("Ready and Running"); 
     this.add(status);  
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g);    
     g.drawString(status.getText(), 10,10); 
     } 

    public void setMessage(String message) { 
     status.setText("Status : " + message);   
     repaint(); 
    } 
} 

이 클래스의 객체를 생성하여 JFrame에 추가했습니다. 패널이 추가되었지만 프레임의 후속 구현에서 setMessage() 메소드를 호출하면 메시지가 다시 채워지지 않습니다. 즉, 상태 패널이 상태 메시지를 새로 고치지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?

추신 : 상태가 변경 될 때마다 부모 JFrame을 revalidate() 및 repaint()하고 싶지 않습니다. 위 코드와 같이 매번 상태 패널을 새로 고치기 만하면됩니다. 이것을 할 수있는 방법이 있습니까?

답변

3

당신은 ... 이것은 어떻게해야 paintComponent 전화를 필요가 없습니다 :

public class StatusBar extends JPanel { 
    JLabel status; 

    public StatusBar() { 
     this.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 0)) ; 
     status = new JLabel("Ready and Running"); 
     this.add(status);  
    } 

    public void setMessage(String message) { 
     status.setText("Status : " + message);   
    } 
} 

을 또는 참으로 당신은 단지 GUI가의 JLabel

public class StatusBar extends JLabel { 

    public StatusBar() { 
     setMessage("Ready and Running"); 
    } 

    public void setMessage(String message) { 
     setText(message) ;   
    }   
} 
+0

아니요 이미 시도해 보았습니다. setText는 JFrame 클래스만으로 호출하지 않기 때문에 작동하지 않습니다. JFrame에서 사용하는 다른 클래스에서 setMessage를 호출해야합니다. 이렇게하면 텍스트는 레이블로 설정되지만 프레임에는 표시되지 않습니다. –

+1

이런 종류의 정보가 당신이 질문했을 때 도움이되었을 것이라고 생각하지 않습니까? 가능한 한 실제 문제에 대한 많은 정보를 제공하도록 질문을 편집하십시오. 귀하의 문제가 더 많은 관련이 있습니다 __how__ 클래스를 사용하여 –

+2

@ Vamsi, 그것은 무엇을 호출하지 않습니다 setMessage 메서드, 이것은 적절한 방법으로 문제를 처리 할 수 ​​있습니다. 이것이 당신을 위해 작동하지 않는다면 당신의 문제는 실제로 당신의 코드의 다른 곳에 있습니다. – jzd

0

가 업데이트되지 확장하는 클래스를 사용할 수 있습니다 이 tutorial의 일반적인 알려진 문제는 문제의 원인을 정확히 설명합니다.

관련 문제