gpt4 book ai didi

java - SWT JFace如何在moveBelow()后重绘

转载 作者:行者123 更新时间:2023-12-02 00:14:06 26 4
gpt4 key购买 nike

我有一个 View ,其中显示元素,具体取决于之前的选择。 dispose() 和parent.layout() 确实按预期删除元素。问题是,我怎样才能把它们找回来?我想, dispose() 不会删除元素,只是将其从元素列表中取出来渲染。那么,我怎样才能拿回一个呢?

提前致谢,马库斯

<小时/> 编辑:

刚刚发现,dispose() 释放了对象并递归地释放了它的子对象,所以一旦我处置了它们,我就必须重新创建它们?如果是这样,我怎样才能找到例如内的位置?网格布局?

<小时/> 编辑(2):

根据下面的答案,我已经尝试过:

public class TestTab extends Composite 
{
org.eclipse.swt.layout.GridLayout layout = null;

GridData griddata = null;

Button upperButton = null;
Text textInTheMiddle = null;
Button lowerButton = null;

public InvoiceTab(Composite parent, int arg2) {

super(parent, arg2);
final Composite myParent = parent;

layout = new org.eclipse.swt.layout.GridLayout(GridData.FILL_BOTH,
false);
layout.numColumns = 1;

this.setLayout(layout);


upperButton = new Button(this, SWT.PUSH);
upperButton.setText("upper Button");

textInTheMiddle = new Text(this, SWT.BORDER);

lowerButton = new Button(this, SWT.PUSH);
lowerButton.setText("lower Button");

upperButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {

if (textInTheMiddle.isVisible()) {
textInTheMiddle.setVisible(false);
lowerButton.moveBelow(upperButton);
} else {
textInTheMiddle.setVisible(true);
lowerButton.moveBelow(textInTheMiddle);
}
myParent.layout();
}
});
}
}

文本字段按预期可见,但下部按钮没有改变位置?再次感谢您的任何想法...

最佳答案

是的,dispose() 释放该对象并递归地释放它的子对象。所以你必须重新创建你已经处理过的控件/小部件。在像您这样的情况下,建议隐藏控件并重新布局您的组合/容器。例如see here

代码!!

重点是 GridData::exclude 属性的使用。

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

class TestTab extends Composite
{
Button upperButton = null;
Text textInTheMiddle = null;
Button lowerButton = null;

boolean state = true;

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


GridLayout layout = new GridLayout(1, false);
setLayout(layout);


upperButton = new Button(this, SWT.PUSH);
upperButton.setText("upper Button");

textInTheMiddle = new Text(this, SWT.BORDER);
GridData data = new GridData(SWT.FILL, SWT.FILL, true, false);
data.exclude = false;
textInTheMiddle.setLayoutData(data);

lowerButton = new Button(this, SWT.PUSH);
lowerButton.setText("lower Button");

upperButton.addSelectionListener(new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e) {


GridData griddata = (GridData) textInTheMiddle.getLayoutData();
griddata.exclude = state;
textInTheMiddle.setVisible(!state);
textInTheMiddle.getParent().layout(false);
state = !state;
}
});
}

}
public class Test
{
public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));

new TestTab(shell, SWT.NONE);

shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}

关于java - SWT JFace如何在moveBelow()后重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12209359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com