2012-05-18 9 views
1

Vaadin 어플리케이션이 있습니다. 구성 요소 중 하나는 테이블입니다. 사용자가 원하는만큼의 열을 추가 할 수있는 가능성이 필요합니다 (당장은 최대 20 개). 처음에는 5 개의 열이 있으므로 실제로 사용자가 6 - 20 열을 추가 할 수 있습니다. 그러나 "layout.addComponent (...)"를 수행 한 후에는이 테이블을 더 이상 편집 할 수 없습니다.Vaadin - 테이블을 동적으로 생성합니다.

  1. 는 현재 행 수를 저장하고 "추가"버튼을 클릭 할 때마다 1 씩 증가하는 변수가있다 :

    나는이 일을 시도했다. 클릭 할 때마다 표에 1 개의 열이 추가됩니다.

  2. 또 다른 아이디어는 변수 (예 : 아이디어 1)와 셀 어딘가에있는 값 (예 : 무엇이든)을 유지하는 것입니다. "추가"버튼을 클릭하면 전체 테이블이 제거 된 다음 모든 열이 추가되고 (모든 열 + 새 열) 새 열이 추가됩니다.

그러나 이러한 아이디어 중 어느 것도 작동하지 않습니다.

제안 사항?

답변

0

Table에 연결된 ContaineraddContainerProperty을 호출하는 것으로 충분하다고 생각합니다. 그러면 표에 PropertySetChangeEvent이 발생해야합니다.

Table.setVisibleColumns을 사용하여 보이는 열을 제한하지 않는 한 당연히.

이 방법이 도움이되지 않는다면 문제를 해결하는 데 도움이 될 수 있습니다.

0

MyContainer가 IndexedContainer를 확장하면 자유롭게 사용할 수 있습니다. 단지 샘플로, 단순히 사육사의지도 (동적) 직렬화되는 통계가 있고, MyContainer 변경 사항을 사육사하는 수신 :

우리가지도하는 새로운 (키, 값) 쌍을 추가
public class MyContainer extends IndexedContainer { 
    ... 
    public void process(final ModelChangeEvent event) { 
     ... 
     for (Map.Entry<String, Long> entry : newTask.getCounters().entrySet()) { 
      addContainerProperty(entry.getKey(), Long.class, 0L); 
      Property property = getContainerProperty(taskName, entry.getKey()); 
      property.setValue(entry.getValue()); 
     } 
     fireContainerPropertySetChange(); 
     ... 
    } 

, 우리는 새로운 얻을 것이다 열이 자동으로 표시됩니다. 여기서 "키"는 열 제목이고 "값"은 셀 값입니다. "불"이라고 부를 필요가 없습니다. IndexedContainer 구현 (소스를 확인)에 의해 자동으로 호출됩니다.

관련 문제