自动修改添加到SashForm中运行时的Composite

时间:2019-06-03 14:08:45

标签: java swt

我的软件Java使用一个基本的插件系统,每个插件都允许您扩展一种方法,该方法将运行时对象插入Composite中,在代码中命名为“ content”,并使用BorderLayout插入SashForm中,以允许用户管理插件的选项。

发生的事情是,在“首选项”窗口中,新元素不会自动适应大小为0并因此不可见的其余窗口。

我设法使用setBounds()使它们可见的唯一方法

这是该方法的实现,通过该方法插件可以在“首选项”窗口中创建控件

class TestPref extends PreferenceNode{
        public TestPref(){
            System.out.println("Creating plugin preferences");
            setTitle("Test plugin");
        }

        @Override
        public void popolatePreferenzeComposite(Composite _composite, Properties _workbenchProp, Properties _userProp) {
            Label lblPrometeoTestPlugin = new Label(_composite, SWT.NONE);
            //lblPrometeoTestPlugin.setBounds(10, 10, 430, 15);
            lblPrometeoTestPlugin.setText("Prometeo Test Plugin v.1.0.0");

        }
    }

这是“首选项”窗口的一种方法,当用户单击树菜单项时,该窗口会填充内容。

// Prometeo->Plugins
        String itemPrometeoPlugins=ApplicationLauncher.texts.getString("com.gega.prometeo.workbanch.preferences.tree.prometeo.plugins");
        tree.addListener(SWT.Selection, new Listener() {
            public void handleEvent(Event event) {
                if(tree.getSelection()[0].getText().equals(itemPrometeoPlugins)) {
                    clearContent();

                    Table table = new Table(content, SWT.BORDER | SWT.FULL_SELECTION);
                    table.setLayoutData(BorderLayout.CENTER);
                    table.setHeaderVisible(true);
                    table.setLinesVisible(true);

                    TableColumn tblclmnNome = new TableColumn(table, SWT.NONE);
                    tblclmnNome.setWidth(100);
                    tblclmnNome.setText("Nome");

                    TableColumn tblclmnVersione = new TableColumn(table, SWT.NONE);
                    tblclmnVersione.setWidth(100);
                    tblclmnVersione.setText("Versione");

                    TableColumn tblclmnStatus = new TableColumn(table, SWT.NONE);
                    tblclmnStatus.setWidth(100);
                    tblclmnStatus.setText("Status");

                }       
            }
        });
public void clearContent() {
        for (Control control : content.getChildren()) {
            control.dispose();
        }
    }

没有setBounds enter image description here 与setBounds enter image description here

非常感谢大家

1 个答案:

答案 0 :(得分:0)

我能够以这种方式使用setBounds()找到解决方案

table.setBounds(0,0,content.getBounds()。width,content.getBounds()。height)