У меня есть TableViewer, который, как я знаю, всегда будет содержать одну строку данных. Когда у меня есть данные для этой таблицы, я могу позвонить setInputData(...)
и передать одному объекту Arrays.asList(...)
, чтобы таблица правильно отображала одну строку данных.JFace TableViewer - Как установить размер для отображения только одной строки?
Когда у меня нет объекта, я все равно хочу, чтобы таблица имела размер, чтобы отображать только одну строку. Тем не менее, если я использую это: setInputData(new ArrayList<Object>(0))
, таблица авто-размера показывает около 3 & полных пустых строк. Как я могу заставить таблицу всегда иметь размер, чтобы отображать только одну строку?
Следует отметить, что я использую GridLayout для Composite, что TableViewer находится как внутри, так и для TableViewer.
Я попытался установить границы для таблицы SWT в TableViewer как размер одного элемента, но это не помогло. Я не нашел подобных вопросов по SO или обычным поиском Google, однако в этом вопросе: TableViewer shrinks to a single row with a scroll bar when new input is set, ассеру удалось показать его таблицу размером в одну строку. К сожалению, мне не хватает репутации. чтобы прокомментировать его, как он это сделал.
EDIT: Добавление некоторых более соответствующий код
final ScrolledComposite scrolledComposite = new ScrolledComposite(parentComposite, SWT.V_SCROLL);
scrolledComposite.setLayout(new GridLayout());
scrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
scrolledComposite.setAlwaysShowScrollBars(true);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
TableViewer tableViewer = new TableViewer(scrolledComposite, SWT.FULL_SELECTION | SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL);
// I'm setting the LabelProvider, ContentProvider here.
GridData gridData = new GridData();
gridData.heightHint = tableViewer.getTable().getItemHeight();
tableViewer.getTable().setLayoutData(gridData);
scrolledComposite.setContent(tableViewer.getControl());
scrolledComposite.setMinSize(tableViewer.getTable().getGridLineWidth(), tableViewer.getTable().getItemHeight());
И затем, в отдельный метод:
tableViewer.setInputData(objectList); // This may be empty or have exactly one object
Если он работает, когда у вас есть один пункт в таблице это звучит, как это было бы простейшим просто поставить один манекен элемент в таблице, когда он пуст. –
К сожалению, в том месте, где я устанавливаю вход в таблицу, я не знаю тип объекта. Он передается. Поэтому я не могу создать экземпляр нового объекта правильного типа, потому что я не знаю тип в то время, и я не могу дать общий «новый объект()», потому что тогда я получаю ошибки, когда «LabelProvider» пытается сопоставить новый объект. – Neil
Почему таблица встроена в 'ScrolledComposite'? У этого есть свои собственные полосы прокрутки, нет необходимости в 'ScrolledComposite'. –