2013-05-31 3 views
2

JTabbedPane이 있는데 사용자가 선택하면 탭 1 구성 요소로 대체해야합니다. 응용 프로그램 시작시 올바른 구성 요소를 추가 할 수 없습니다. 생성 할 전체 데이터가 없기 때문에 직접 구성 요소를 추가 할 수 없습니다. 이 탭 한 후 탭 다른 탭을 제거하고, 중복선택 탭에서 JTabbedPane 구성 요소를 변경하십시오.

int tabTochange = 1; 
    tabbedPane.addChangeListener(new ChangeListener() { 
     public void stateChanged(ChangeEvent e) { 
      if (tabbedPane.getSelectedIndex() == tabTochange) 
      { 
       JComponent component = generataComponent(); 
       tabbedPane.removeTabAt(tabTochange); // Remove old tab 
       // add new one 
       tabbedPane.insertTab("title", null, component, "tip", tabTochange); 

      } 
     } 
    }); 

하지만이 코드는 작동하지 않습니다

나는 이런 식으로 뭔가를해야합니다.

답변

3

대신 removeTabAt()insertTab()이 참조를 구성 요소를 얻을 수 getComponentAt(tabTochange) 또는 getSelectedComponent()를 사용하는 GUI 시작에 준비한다 . 필요할 경우 CardLayout을 사용하여 구성 요소를 업데이트하십시오.

+1

이 방법을 사용하여 tabbedPane 탭 1 첫 번째로 만든 그대로, 또한 getComponentAt (tabTochange) 구성 요소 특성을 수정했습니다. 어쩌면 다시 그리기를 강요 할 필요가 있을까요? – Alvins

+1

일반적인 접근법은'revalidate()'와'repaint()'입니다.'CardLayout'은 그것을 처리합니다. – trashgod

2
  • 나는 JTabbedPane에/CardLayout 그것이 가능하다하더라도, 번호, 주문, 런타임에 탭/카드의 번호를 변경하지 않는, 탭/카드를 수정/추가/제거를하지 않고 정적 GUI로 개발 된 생각

  • 당신은 각각에 인 JPanel를 작성,

  • 이 JFrame의의 왼쪽에있는 JList의을 (JTree가이 구조를 따라) 넣어 차 배열의 탭 (인덱싱하고 JComponent의)를 개최, 부작용의 무리를 해결하기 위해 필요 Items/Nodes를 선택하고,이 JPanel을 CardLayout에 넣고 적절한 List (Tree) SelectionListener를 추가 한 다음 마우스에서 선택합니다/키보드 카드 사이의 스위치를 발사합니다,이 stucture에서 아무것도 (JComponent의 가치 제외) 동적 없으며, 모든 것이

0

tab1의 색인이 1이고 tab2의 색인이 2 인 경우 tab1을 제거한 후 tab2의 색인이 1이되지 않습니까? 따라서 인덱스가 1 인 새 탭을 추가하면 작동하지 않습니다. 어쩌면 그냥 tab1을 변경하는 방법이있을 것입니다.

또한 각 탭에는 JPanel이 있어야하므로 해당 JPanel과 탭의 제목 텍스트 만 변경하면됩니다.

나는 이것이 당신의 질문에 완전히 대답하지 않는다는 것을 알고 있지만, 나는 단지 그것을 코멘트로 넣을만한 충분한 점수가 없다고 생각합니다. 희망이 도움 :

관련 문제