如何替换SWT GridLayout中网格单元的内容?

发布于 2024-12-08 10:55:31 字数 73 浏览 1 评论 0原文

单击按钮后我需要替换网格单元格的内容。例如:有Label,我需要将其替换为Text。可以用GridLayout吗?我需要使用SWT。

I need to replace content of grid cell after button click. For example: there is Label and I need to replace it with Text. Is it possible with GridLayout? I need to use SWT.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

带刺的爱情 2024-12-15 10:55:31

您只需处理 Label 并在其位置放置一个新的 Text 即可。 GridLayout 使用子级的 z 顺序来确定网格中的位置,因此您需要使用 moveAbove()moveBelow()Text 上的 code> 以便将其放在正确的位置。然后在父级上调用 layout() 。例如:

Text text = new Text(label.getParent(), SWT.BORDER);
text.moveAbove(label);
label.dispose();
text.getParent().layout();

这是一个简单的小部件,它准确地说明了我的意思:

public class ReplaceWidgetComposite
    extends Composite
{
    private Label label;
    private Text text;
    private Button button;

    public ReplaceWidgetComposite(Composite parent, int style)
    {
        super(parent, style);

        setLayout(new GridLayout(1, false));

        label = new Label(this, SWT.NONE);
        label.setText("This is a label!");

        button = new Button(this, SWT.PUSH);
        button.setText("Press me to change");
        button.addSelectionListener(new SelectionAdapter()
        {
            public void widgetSelected(SelectionEvent e)
            {
                text = new Text(ReplaceWidgetComposite.this, SWT.BORDER);
                text.setText("Now it's a text!");
                text.moveAbove(label);
                label.dispose();
                button.dispose();
                ReplaceWidgetComposite.this.layout(true);
            }
        });
    }
}

You can simply dispose the Label and put a new Text in its place. GridLayout uses the z-order of children to determine the location in the grid, so you'll need to use the moveAbove() and moveBelow() on the Text in order to get it in the correct location. Then call layout() on the parent. For example:

Text text = new Text(label.getParent(), SWT.BORDER);
text.moveAbove(label);
label.dispose();
text.getParent().layout();

Here's a simple widget that illustrates exactly what I mean:

public class ReplaceWidgetComposite
    extends Composite
{
    private Label label;
    private Text text;
    private Button button;

    public ReplaceWidgetComposite(Composite parent, int style)
    {
        super(parent, style);

        setLayout(new GridLayout(1, false));

        label = new Label(this, SWT.NONE);
        label.setText("This is a label!");

        button = new Button(this, SWT.PUSH);
        button.setText("Press me to change");
        button.addSelectionListener(new SelectionAdapter()
        {
            public void widgetSelected(SelectionEvent e)
            {
                text = new Text(ReplaceWidgetComposite.this, SWT.BORDER);
                text.setText("Now it's a text!");
                text.moveAbove(label);
                label.dispose();
                button.dispose();
                ReplaceWidgetComposite.this.layout(true);
            }
        });
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文