Как я могу создать 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()
).
Вы можете сделать две вещи:
- определять
typex
а такжеtypey
как поля вашего класса. Тогда они будут доступны из любогоstatic
метод в вашем классе. - Определите своих слушателей так:
new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
String typex = combo_2.getText();
String typey = combo_1.getText();
System.out.println(typex + " " + typey);
}
}
Кстати: не используйте setBounds
если вы действительно не должны. Вместо этого используйте макет. Эта статья должна быть полезной: