2012-07-03 3 views
0

두 가지 클래스가 있습니다. 하나는 CreateDefault이고, 이는 내 프로그램에 대한 GUI 설정을 만듭니다. 다른 클래스는 tabPanePopup입니다.이 클래스는 CreateDefault와 관련된 JTabbedPane에 대한 팝업 및 명령을 만듭니다.정수가 수정되어 반환되지만 getter 함수는 수정하지 않습니다. 어떤 아이디어?

public int getCount() { return this.count; } 

위의 코드는 count를 반환합니다. 카운트, 생성 된 새 문서 수를 계산합니다. getCount()는 CreateDefault 클래스의 일부입니다.

아래 코드는 tabPanePopup의 일부입니다. newTab이 수행하는 작업은 이미 작성되었습니다. CreateDefault에서는 원래 count = 1이고 GUI가 완전히 생성되면 total = 2가됩니다. tabPanePopup 클래스에서 getCount()가 호출되면 getCount()는 2를 반환하지만 1을 반환합니다. CreateDefault 클래스의 count에 println 함수를 사용하면 2가 인쇄되지만 tabPanePopup에는 1이 인쇄됩니다. 이 일을하는 데 어떤 이유가 있습니까? GUI가 생성 될 때 count ++를 모두 수정하지 않고 GUI가 생성 될 때까지 getCount() 함수를 호출 할 수 없습니다.

newTab.addActionListener(new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent action) { 
      CreateDefault get = new CreateDefault(); 
      int count = get.getCount(); 
      String parsed = Integer.toString(count); 
      Font myFont = new Font("Calibri", Font.BOLD, 12); 
      JEditorPane editorPane = new JEditorPane(); 
      JScrollPane scrollPane = new JScrollPane(editorPane, 
        JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
        JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
      LineCounter counter = new LineCounter(editorPane); 
      UndoManager manager = new UndoManager(); 
      Document document = editorPane.getDocument(); 
      document.addUndoableEditListener(manager); 
      scrollPane.setRowHeaderView(counter); 
      counter.setBackground(Color.white); 
      tabPane.setFont(myFont); 
      tabPane.addTab("New Document " + parsed, scrollPane); 
      tabPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); 
      get.setCount(count++); 
     } 
    }); 

답변

1

아직 우리에게 계시 할 코드에 많이 있기 때문에 이것은 단지 추측이지만, 위의 방법으로 새로운 CreateDefault 개체를 만들 것으로 보인다, 그것은 가능성이 높습니다 이 참인 카운트 결과를 보유하고있는 CreateDefault 인스턴스와 완전히 관련이 없습니다. 열쇠는 새로운 오브젝트를 생성 해 그 오브젝트 위에 getCount()를 호출하는 것이 아니라 원래 인스턴스에서이 메소드를 호출하는 것입니다. 해결책은 어떻게 든 원래 인스턴스에 대한 참조를 얻는 것입니다.

그래서 대신 :

public void actionPerformed(ActionEvent action) { 
    CreateDefault get = new CreateDefault(); 
    int count = get.getCount(); 

수행과 같이하십시오 createDefault 변수가 어떻게 든 원래 CreateDefault 인스턴스를 참조

public void actionPerformed(ActionEvent action) { 
    // CreateDefault get = new CreateDefault(); 
    int count = createDefault.getCount(); 

.

+0

고맙습니다. 그러나 이렇게하면 정적 변수가 만들어지며,이를 불필요하게 사용하는 경향이 있습니다. 나는 그들을 피하려고 노력하고있다. 정적이 아닌 방식으로 getCount()에 액세스하는 데 사용할 수있는 다른 방법이 있습니까? – Frizinator

+0

@StevenTylerFrizell : 아니요, 정적 변수를 사용한다고 말한 적이 없으며 실제로 이것을하지 않기를 강력히 촉구합니다. 인스턴스 필드를 만들고 사용하십시오. 참조를 전달할 수 있도록이 코드가있는 클래스에'setCreateDefault (CreateDefault createDefault) '메소드를 제공해야 할 수도 있습니다. –

+0

자, setCreateDefault (CreateDefualt createDefualt)가 tabPanePopup 클래스에 있어야합니까? 그렇다면, 그 일을하고 CreateDefault 클래스에서 setCreateDefault 함수를 호출하고 tabPanePopup에 CreateDefault의 현재 인스턴스를 보냈습니다. 나는 제대로 따라갈거야? – Frizinator

관련 문제