2012-07-19 2 views
0

아래 코드 예제에서 어떤 수정 자에게 label이라는 변수를 지정해야합니까? 저는 Java에 익숙하지 않지만 JLabel과 같은 스윙에서 사용할 수있는 모든 클래스를 분해하여 동적으로 호출 할 수 있도록하고 싶습니다. 나는 그것을 아래에 바랐다. 하지만 궁극적으로 어딘가에있는 마스터 파일에서 모든 스윙 클래스를 선언 할 수 있기를 원하기 때문에 나는 private static JLabel label;에 대해 확신하지 못했습니다. 감사. 내가 이해이 코드 예제에서 어떤 수정 자에게 변수를 부여해야합니까?

package base; 

import java.awt.Component; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class CreateLabel extends JLabel { 
    private static final long serialVersionUID = 1L; 
    private static JLabel label; 

    public Component createLabel(JFrame frame, String text) { 
     label = new JLabel(text); 
     return frame.getContentPane().add(label); 
    } 
} 
+0

다른 클래스에서 초기화하려는 경우 public 및 static 만 사용해도됩니다. 당신은 setter 메소드를 사용할 수 있지만 그다지 의미가 없습니다. – tommo

+3

왜'CreateLabel'이 JLabel을 확장합니까? 당신이 빌더 패턴으로 상속을 혼동하고있는 것처럼 보입니다. – SJuan76

+4

제 첫 질문은 * 왜 *일까요? 왜 JLabel을 확장하려고합니까? 당신은 팩토리 클래스를 만들려고 했습니까? 그러면 createlabel이 어떤 것도 확장하지 않고 final이되고 createLabel 메서드가 정적이되기를 원할 것입니다. 그리고 이상적으로 여러분은 결코 그것에 대한 참조를 가지지 않을 것입니다 ... –

답변

2

당신은 통과 JFrameJLabel를 추가 할 createLabel() 방법 원이다. 할 수있는 일은 다음과 같습니다 :

public class LabelCreator /*extends JLabel*/ { 
    /*private static final long serialVersionUID = 1L;*/ 
    /*private static JLabel label;*/ 

    public Component createLabel(JFrame frame, String text) { 
     JLabel label = new JLabel(text); 
     return frame/*.getContentPane()*/.add(label); 
    } 
} 

명명 규칙에 따라 클래스 이름이 변경되었습니다.

+0

감사합니다. 괜찮습니다. 왜 클래스 이름을 CreateLabel에서 LabelCreator로 변경하겠습니까? 감사. – JoJo

+0

@JoJo : 클래스 이름은 명사이어야합니다. 메소드는 동사 여야합니다. 또한 작동하는 경우 대답을 수락해야합니다. – Mohayemin

+0

왜 프레임을 create 메서드에 전달할 것인지 잘 모르겠습니다. 이는 레이블이 항상 내용 분할 창의 중심에 추가된다는 것을 의미합니다. 실제로는 사용자가 실제로 원하는 것은 거의 없습니다. –