SWT按钮:删除现有按钮并添加新按钮

时间:2014-08-21 07:52:57

标签: java button swt

我想根据您在菜单中点击的内容动态添加按钮。

first option selected

我遇到的问题是,当我在菜单中选择一个新选项并取消选择第一个选项时,第一个选项会保持开启状态,而新选项会在其下面呈现。

overlaying buttons

如何动态删除和添加新按钮?

到目前为止我的代码:

    table.addListener(SWT.Selection, new Listener() {
        public void handleEvent(Event event) {
            final ArrayList<ArrayList<String>> displaySentences = new ArrayList<ArrayList<String>>();
            final ArrayList<ArrayList<String[]>> displayDiphones = new ArrayList<ArrayList<String[]>>();

            for (int i = 0; i < table.getItemCount(); i++) {
                TableItem item = table.getItem(i);
                if (item.getChecked()) {
                    displaySentences.add(new ArrayList<String>());
                    displayDiphones.add(new ArrayList<String[]>());
                    for (int j = 0; j < sentences.get(i).size(); j++) {
                        displaySentences.get(displaySentences.size() - 1).add(sentences.get(i).get(j));
                        displayDiphones.get(displayDiphones.size() - 1).add(diphones.get(i).get(j));
                    }
                }
            }

            int x = 180;
            int y = 10;
            int w = 50;
            for (int i = 0; i < displaySentences.size(); i++) {
                for (int j = 0; j < displaySentences.get(i).size(); j++) {
                    final Button button = new Button(shell, SWT.PUSH);
                    w = setButtonWidth(displaySentences.get(i).get(j));
                    button.setBounds(x, y, w, 25);
                    button.setText(displaySentences.get(i).get(j));
                    button.setData(displaySentences.get(i).get(j), new int[] { i, j });
                    x += w;
                    if (x > 700) {
                        x = 180;
                        y += 25;
                    }
                    button.addListener(SWT.Selection, new Listener() {
                        public void handleEvent(Event e) {
                            switch (e.type) {
                            case SWT.Selection:
                                int[] a = (int[]) button.getData(button.getText());

                                for (int k = 0; k < displayDiphones.get(a[0]).get(a[1]).length; k++) {
                                    final Button buttonDiphone = new Button(shell, SWT.PUSH);
                                    buttonDiphone.setBounds(180 + k * 30, 100, 30, 25);
                                    buttonDiphone.setText(displayDiphones.get(a[0]).get(a[1])[k]);
                                    buttonDiphone.setData(displayDiphones.get(a[0]).get(a[1])[k], randomInteger());

                                    buttonDiphone.addListener(SWT.Selection, new Listener() {
                                                public void handleEvent(
                                                        Event e) {
                                                    switch (e.type) {
                                                    case SWT.Selection:
                                                        txtConsole.setText(buttonDiphone.getText() + ": " + buttonDiphone.getData(buttonDiphone.getText()));
                                                        break;
                                                    }
                                                }
                                            });
                                }

                                break;
                            }
                        }
                    });
                }
            }
        }
    });

谢谢!

0 个答案:

没有答案