2013-05-12 2 views
2
private void initialize() { 
    frame = new JFrame(); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

    JPanel panel = new JPanel(); 
    panel.setBounds(0, 0, 434, 261); 
    frame.getContentPane().add(panel); 
    panel.setLayout(null); 

    JCheckBox chckbxCheckbox = new JCheckBox("checkbox"); 
    chckbxCheckbox.setBounds(44, 41, 97, 23); 
    panel.add(chckbxCheckbox); 

    JCheckBox chckbxCheckbox_1 = new JCheckBox("checkbox 2"); 
    chckbxCheckbox_1.setBounds(197, 41, 97, 23); 
    panel.add(chckbxCheckbox_1); 
} 

기본적으로 의 상태를 변경하려면 chckbxCheckbox_1의 상태를 변경해야합니다. 변질 후, 코드 섹션은 다음과 같습니다 : 나는 다음과 같은 얻을구성 요소와 관련된 문제 - 범위

JCheckBox chckbxCheckbox = new JCheckBox("checkbox"); 
    chckbxCheckbox.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      chckbxCheckbox_1.setEnabled(false); 
     } 
    }); 
    chckbxCheckbox.setBounds(44, 41, 97, 23); 

    panel.add(chckbxCheckbox); 

    JCheckBox chckbxCheckbox_1 = new JCheckBox("checkbox 2"); 
    chckbxCheckbox_1.setBounds(197, 41, 97, 23); 
    panel.add(chckbxCheckbox_1); 

을 :

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: 
chckbxCheckbox_1 cannot be resolved 

, 어떻게 코드 낮은 표시 구성 요소에 대한 작업을 수행하는이되는 질문? 다시 말하지만 이것은 단지 예제 코드 일뿐입니다. 내가 작업하고있는 코드에는 결국이 문제를 피하기 위해 코드를 움직일 수없는 방식으로 서로 상호 작용하는 더 많은 구성 요소가 있습니다.

+0

chckbxCheckbox_1.setBounds (197, 41, 97, 23); Java GUI는 다양한 화면 해상도와 다양한 PLAF를 사용하는 다양한 플랫폼에서 작동해야 할 수도 있습니다. 따라서 구성 요소의 정확한 배치에 도움이되지 않습니다. 견고한 GUI의 경우 레이아웃 관리자 또는 공백을위한 레이아웃 패딩 및 테두리와 함께 레이아웃 관리자를 사용하여 구성 요소를 구성합니다. –

+0

JCheckBox 제거 chckbxCheckbox_1 = 새 JCheckBox ("체크 박스 2"); 초기화 블록에서 make를 실행하고 인스턴스 변수를 변경 한 다음이 인스턴스 변수를 애프터 변경 블록에서 사용하려고 시도합니다. 변경 블록 이후에 새 확인란을 만들지 마십시오. –

+0

감사합니다, 당신의 도움은 귀중한되었습니다. – Matt

답변

-1

항목에 직접 액세스하는 대신 getter를 사용해야합니다. getter는 객체가 처음 사용될 때 인스턴스화 할 수 있습니다.

getCheckBox1() 
{ 
    if(mCheckbox1 == null) 
    { 
     mCheckbox1 = new; 
    } 
    return mCheckbox1; 
} 
+0

지연 초기화 (Lazy Initialization)는 단순히 범위 문제 인 것을 가장 확실하게 해결하지 못합니다. –

+0

Getter를 사용하면 지역 변수 대신 멤버 변수를 강제로 만들었 기 때문에이 문제를 확실히 해결했을 것입니다. 그러나이 경우에는 필요하지 않았을 수도 있습니다. – Devolus

+0

아니요, 여전히 큰 실수입니다. 그가 getter에서 컴포넌트를 생성 했더라도 여전히 init 메소드에서 다시 선언하여 변수를 섀도 잉하고 있기 때문에 표시되는 객체와 동일하지는 않습니다. 다시 주요 문제를 해결하지 않고 변수를 음영 처리하는 것만으로도 대답은 거의되지 않지만 오해의 소지가 있습니다. –

2

chckbxCheckbox_1 변수가 섀도 잉되어 있습니다. 메소드 나 생성자가 아닌 클래스에서 선언해야합니다.

그래서보다는,

private void initialize() { 
    frame = new JFrame(); 
    frame.setBounds(100, 100, 450, 300); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.getContentPane().setLayout(null); 

    JPanel panel = new JPanel(); 
    panel.setBounds(0, 0, 434, 261); 
    frame.getContentPane().add(panel); 
    panel.setLayout(null); 

    JCheckBox chckbxCheckbox = new JCheckBox("checkbox"); 
    chckbxCheckbox.setBounds(44, 41, 97, 23); 
    panel.add(chckbxCheckbox); 

    JCheckBox chckbxCheckbox_1 = new JCheckBox("checkbox 2"); 
    chckbxCheckbox_1.setBounds(197, 41, 97, 23); 
    panel.add(chckbxCheckbox_1); 
} 

는 수행

public MyClass { 
    // declared in class 
    private JCheckBox chckbxCheckbox_1; 

    private void initialize() { 
     frame = new JFrame(); 
     frame.setBounds(100, 100, 450, 300); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(null); 

     JPanel panel = new JPanel(); 
     panel.setBounds(0, 0, 434, 261); 
     frame.getContentPane().add(panel); 
     panel.setLayout(null); 

     JCheckBox chckbxCheckbox = new JCheckBox("checkbox"); 
     chckbxCheckbox.setBounds(44, 41, 97, 23); 
     panel.add(chckbxCheckbox); 

     // declare this variable in the class 
     chckbxCheckbox_1 = new JCheckBox("checkbox 2"); 
     chckbxCheckbox_1.setBounds(197, 41, 97, 23); 
     panel.add(chckbxCheckbox_1); 
    } 

다음 당신은 최대 읽기 및 스윙 레이아웃 매니저를 사용하는 법을 배워야 할 것입니다.

+1

언제나 그렇듯이 Stack Overflow는이 문제에 대한 나의 무지를 고쳐주었습니다 (아마도 코딩에 대한 나의 무지 함). 스윙 레이아웃을 좀 더 자세히 살펴보고 절대적인 것에 대한 선호도를 넘어서십시오. 그 처음은 아닙니다. – Matt

관련 문제