2016-11-04 9 views
0

5 개의 열이있는 JFace TableViewer가 있습니다. 한 열에 긴 문자열이있을 수 있습니다. 이 테스트는 getText(Object element) 메서드를 호출하여 ColumnLabelProvider에서 설정됩니다.JFace TableViewer 열로 ColumnLabelProvider 텍스트를 자르고 확장합니다.

현재 텍스트는 문자열 끝에서 열 너비로 잘리고 끝에 "..."로 끝나며 사용자가 열 너비의 크기를 조정할 때 문자를 텍스트에 추가합니다.

이 동작을 사용하고 싶습니다. 그러나 텍스트 문자열의 중간에 "..."가 표시되어 사용자가 텍스트의 첫 번째 부분과 텍스트의 끝 부분을 볼 수 있습니다. 현재 열이 설정됩니다. 예를 들어

내 열은 현재 "this is a long piece of text larger than the column width" "this is a long piece of text larger..."

하고 싶습니다 그것이

"this is a long piece ... column width" 를 표시해야 할뿐만 아니라,이 텍스트 때 중간에서 확장하도록 절단 열 폭이 축소되면 열 폭이 확장되고 다시 수축된다.

RCP E4 응용 프로그램에서 Jface Tableviewer를 사용하여이 작업을 수행하는 방법에 대한 의견이 있으십니까?

텍스트 문자열의 끝에있는 텍스트를 잘라내는 기존 메서드를 재정의 할 수 있으면 좋을 것입니다.

+0

이것은 테이블이 사용하는 네이티브 컨트롤에 의해 이루어지며 OS에 따라 다릅니다 (예 : macOS에서는 발생하지 않음). 이로 인해 변경하기가 어렵습니다. 아마도 OwnerDrawLabelProvider를 사용하여이 작업을 수행 할 수 있습니다. –

답변

0

결국 전체 텍스트와 열 너비를 사용하는 열 레이블 공급자 내부에 메서드를 만들어야했습니다. 즉, 열의 현재 너비를 측정하고 레이블 공급자의 텍스트 길이를 가져 와서 칼럼 너비에 맞 춥니 다. 열이 substring1을 확장하고 substring 2가 증가함에 따라. 머리에 substring1을 넣고 가운데에 줄임표를 넣고 꼬리 부분에 substring2를 놓습니다. 효율적인 코드는 아니지만 우리의 목적을 위해 작동합니다. Column에 ControlListener를 추가하고 열의 크기를 조정할 때 열이있는 뷰어를 새로 고치는 controlResized (ControlEvent e) 메서드의 @Override를 수행했습니다.