Java 我如何在SWT中创建一个根据另一个CCOMO的价值变化的CCOMO?

Java 我如何在SWT中创建一个根据另一个CCOMO的价值变化的CCOMO?,java,swt,windowbuilder,Java,Swt,Windowbuilder,我有1个cmbo或下拉菜单,其中包含项目类型,如“鞋”、“衬衫”、“裤子”,我希望第二个cmbo根据第一个cmbo选择的内容更改其内容。例如,如果选择了衬衫,我希望第二个cmbo是“小”、“中”、“大”,但是如果选择了鞋子,我希望第二个cmbo是“8”、“9”、“10”。对于第一个cmbo,我有以下代码块: final CCombo combo_2 = new CCombo(composite, SWT.BORDER); combo_2.setToolTipText(""); combo_2.s

我有1个cmbo或下拉菜单,其中包含项目类型,如
“鞋”、“衬衫”、“裤子”
,我希望第二个cmbo根据第一个cmbo选择的内容更改其内容。例如,如果选择了
衬衫
,我希望第二个cmbo是
“小”、“中”、“大”
,但是如果选择了
鞋子
,我希望第二个cmbo是
“8”、“9”、“10”
。对于第一个cmbo,我有以下代码块:

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");
    }});
    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");
    }});
每当项目类型发生更改时,它都会侦听并打印。对于第二个cmbo,我有以下代码块:

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");
    }});
    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");
    }});

当我尝试在第二个CComo的块中获取
typex
的值时,Ecipse说
“typex不能解析为变量”

您在
侦听器中定义了
typex
typey
,因此,它们仅在所述侦听器中有效。这是因为它们仅限于在(
widgetSelected()
)中定义的方法

你可以做两件事:

  • typex
    typey
    定义为类的字段。然后可以从类中的任何非
  • 静态方法访问它们
  • 如下定义您的侦听器:


  • 顺便说一句:除非你真的需要,否则不要使用
    setBounds
    。改用布局。这篇文章应该有帮助: