Как я могу создать CCombo в SWT, который изменяется в зависимости от значения другого CCombo?

У меня есть 1 CCombo или выпадающее меню, которое содержит типы элементов, такие как "Shoes", "Shirts", "Pants" и я хочу, чтобы второй CCombo изменил свое содержимое в зависимости от того, что выбрал первый. Например, если Shirts я хочу, чтобы второй CCombo был "Small", "Medium", "Large", но если Shoes я хочу, чтобы второй CCombo был "8", "9", "10", Для первого CCombo у меня есть следующий блок кода:

final CCombo combo_2 = new CCombo(composite, SWT.BORDER);
combo_2.setToolTipText("");
combo_2.setListVisible(true);
combo_2.setItems(new String[] {"Shoes","Pants","Shirt"});
combo_2.setEditable(false);
combo_2.setBounds(57, 125, 109, 21);
combo_2.setText("Type");
combo_2.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent e) {
        String typex = combo_2.getText();
        System.out.println("Type: "+ typex +" selected");
    }});

Он слушает и печатает всякий раз, когда тип элемента изменяется. Для второго CCombo у меня есть этот блок кода:

    final CCombo combo_1 = new CCombo(composite, SWT.BORDER);
combo_1.setToolTipText("");
combo_1.setListVisible(true);
combo_1.setItems(new String[] {"Small","Medium","Large"});
combo_1.setEditable(false);
combo_1.setBounds(57, 208, 109, 21);
combo_1.setText("Size");
combo_1.addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent e) {
        String typey = combo_1.getText();
        System.out.println("Size "+typey+" selected");
    }});

Когда я пытаюсь получить значение typex в блоке второго CCombo, говорит Ecipse "typex cannot be resolved to a variable"

Я очень новичок в Java, поэтому, пожалуйста, держись со мной... Спасибо:)

1 ответ

Решение

Вы определили typex а также typey в пределах Listenerследовательно, они действительны только в указанном слушателе. Это потому, что их область действия ограничена методом, в котором они определены (widgetSelected()).

Вы можете сделать две вещи:

  1. определять typex а также typey как поля вашего класса. Тогда они будут доступны из любогоstatic метод в вашем классе.
  2. Определите своих слушателей так:


new SelectionAdapter()
{
    @Override
    public void widgetSelected(SelectionEvent e)
    {
        String typex = combo_2.getText();
        String typey = combo_1.getText();
        System.out.println(typex + " " + typey);
    }
}

Кстати: не используйте setBounds если вы действительно не должны. Вместо этого используйте макет. Эта статья должна быть полезной:

Понимание макетов в SWT

Другие вопросы по тегам