Эта проблема сводит меня с ума !!! Используя SWT, я хотел бы создать сетку чисел, которую я могу перемещать с помощью клавиатуры. Я хотел бы иметь возможность выбрать и щелкнуть каждую ячейку (а не только цифры), чтобы выполнить какое-либо действие. Другими словами, я ищу способ сделать настоящую кнопку FLAT. Цель здесь - сделать сетку доступной для программ чтения с экрана таким образом, чтобы, когда ячейка была в фокусе, программа чтения с экрана считывала числовое значение в середине каждой ячейки.
Первоначально я создал GridLayout с набором кнопок управления для отображения числовых значений. Это действительно сработало, но я не хотел, чтобы кнопки выглядели как кнопки. Стиль SWT.FLAT для кнопок управления не работает в операционных системах Windows. Это вызвано ограничением ОС.
Затем я попытался преобразовать все кнопки в метки, но поскольку элементы управления метками не могут сфокусироваться, я не смог реализовать какой-либо тип обхода табуляции. Затем я попытался заменить все метки текстовыми элементами управления только для чтения. Мне удалось вновь представить обход / фокусировку вкладок, но я не могу отобразить текст в мертвой точке каждой ячейки. Это на самом деле вызвано ограничением SWT. Стиль SWT.CENTER для текстовых элементов управления влияет только на горизонтальное выравнивание. Элементы управления текстом не могут быть выровнены по вертикали.
Итак, наконец, кто-то сказал мне обернуть каждый текстовый элемент управления только для чтения в Composite. Это позволило мне центрировать текстовые элементы управления только для чтения, но я не знаю, как сделать сам композит для перемещения по табуляции.
Любые идеи о том, как я могу это сделать или как сделать элементы управления, которые обычно не фокусируются (например, составной, холст, метка), на самом деле фокусируются, чтобы я мог перемещаться по каждому элементу управления с помощью клавиатуры?
Я довольно новичок в Java и SWT, поэтому прошу прощения, если что-то из этого сбивает с толку. Большое спасибо. Вот как я построил каждую из своих ячеек (я заменил текст только для чтения элементами управления CLabel):
Display display = new Display();
Shell shell = new Shell(display);
GridLayout gridLayout = new GridLayout(5, false);
gridLayout.marginWidth = 0;
gridLayout.marginHeight = 0;
gridLayout.horizontalSpacing = 1;
gridLayout.verticalSpacing = 1;
shell.setLayout(gridLayout);
Composite resetComp = new Composite(shell, SWT.BORDER);
GridData compgridData = new GridData(SWT.CENTER, SWT.CENTER, true, true);
GridData resetGD = new GridData(SWT.FILL, SWT.FILL, false, false);
resetGD.verticalSpan = 2;
resetComp.setLayoutData(resetGD);
resetComp.setLayout(new GridLayout(1, false));
CLabel resetCLabel = new CLabel(resetComp, SWT.SHADOW_OUT | SWT.CENTER);
resetCLabel.setText("Reset"); //$NON-NLS-1$
resetCLabel.setLayoutData(compgridData);
resetCLabel.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED)); //$NON-NLS-1$
resetComp.setToolTipText(resetCLabel.getText());