Вы пытаетесь установить высоту строки таблицы или самой таблицы ?
Если вы пытаетесь установить высоту строк таблицы, SWT.MeasureItem
события не запускаются, если нет элемента для измерения - поэтому они не будут запущены для пустой таблицы. См. (Несколько сомнительный вид) Ошибка Eclipse 134454 .
Внутренне, Table
имеет setItemHeight(int)
, но вам нужно использовать отражение для доступа к нему, поскольку он защищен пакетом. Отражение - это расширенная языковая функция, которая может быть исключительно полезна, особенно если вам необходимо поддерживать несколько версий среды выполнения Java или несколько версий SWT, где добавляются новые методы или удаляются старые методы. Вы можете динамически запрашивать доступность классов, методов, полей и т. Д. И вызывать их, только если они существуют. Кроме того, вы можете получить доступ к методам и полям, которые обычно защищены для вызывающей стороны. Я бы не рекомендовал часто использовать Reflection, но приятно отступать, когда у вас нет других вариантов.
Этот другой вопрос о стековом потоке хорошо объясняет, как обычно вызывать закрытый метод, но вот конкретный пример получения сигнатуры метода для setItemHeight
метода и его вызова:
final Table table = new Table(parent, SWT.BORDER);
/* Set up table columns, etc. */
table.pack();
try
{
/*
* Locate the method setItemHeight(int). Note that if you do not
* have access to the method, you must use getDeclaredMethod(). If
* setItemHeight(int) were public, you could simply call
* getDeclaredMethod.
*/
Method setItemHeightMethod =
table.getClass().getDeclaredMethod("setItemHeight", int.class);
/*
* Set the method as accessible. Again, this would not be necessary
* if setItemHeight(int) were public.
*/
setItemHeightMethod.setAccessible(true);
/*
* Invoke the method. Equivalent to table.setItemHeight(50).
*/
setItemHeightMethod.invoke(table, 50);
}
catch (Exception e)
{
/*
* Reflection failed, it's probably best to swallow the exception and
* degrade gracefully, as if we never called setItemHeight. Maybe
* log the error or print the exception to stderr?
*/
e.printStackTrace();
}
Однако, если вы на самом деле просто пытаетесь установить высоту для самой таблицы , вероятно, лучше сделать это с помощью вашего макета. Например, установка GridData.heightHint
для GridLayout
.