gpt4 book ai didi

java - 当 SWT 中 tabItem 列表发生更改时,TabItem 不会刷新

转载 作者:行者123 更新时间:2023-12-02 05:06:59 25 4
gpt4 key购买 nike

下面是我的代码,当按下按钮时,我将根据我的情况使用 item1.setcontrol 更改 item1 列表。复合不刷新,但是当我单击 Item2 选项卡并返回 Item1 选项卡时...列表更新取决于条件。请让我知道如何刷新布局而不移动到其他选项卡项目。

    final Composite RightComposite = new Composite(paComposite, SWT.NONE);
RightComposite.setLayout(new GridLayout(1, false));
RightComposite.setLayoutData(new GridData(SWT.FILL, GridData.FILL, true, true));


Composite findComposite = new Composite(RightComposite, SWT.NONE);
findComposite.setLayout(new GridLayout(2, true));
findComposite.setLayoutData(new GridData(SWT.FILL, GridData.FILL, true, false));

txt = new Text(findComposite, SWT.BORDER | SWT.WRAP | SWT.SINGLE);
txt.setLayoutData(new GridData(SWT.FILL, GridData.FILL, true, false));
txt.addListener(SWT.Verify, new Listener()
{
@Override
public void handleEvent(final Event e)
{
newString = ((Text) e.widget).getText();
}
});
btn = new Button(findTCComposite, SWT.NONE);
btn.setLayoutData(new GridData(SWT.BEGINNING, GridData.BEGINNING, false, false));
btn.setText("Find button");
final TabFolder tabFolder = new TabFolder(RightComposite, SWT.NONE);
tabFolder.setLayoutData(new GridData(SWT.FILL, GridData.FILL, true, true));

final TabItem item1 = new TabItem(tabFolder, SWT.NONE);
item1.setText("Tab 1 ");
btn.addListener (SWT.Selection, new Listener()
{
public void handleEvent(Event e) {
if(!newString.isEmpty()){
item1.setControl(list1);
}
else
{
item1.setControl(list);
}
}
});

TabItem item2 = new TabItem(tabFolder, SWT.NONE);
Item2.setText("Tab 2");
RightComposite.layout();

最佳答案

您的问题出在 SWT 的 TabItem 类的 setControl() 函数中。在此函数的末尾,它生成:oldControl.setVisible (false);

因此,在您的情况下,oldControl 将与您设置的控件相同(如果您设置两次),并且它将被隐藏。要解决该问题,可以将代码修改为:

btn.addListener (SWT.Selection,  new Listener() {           
public void handleEvent(Event e) {
if (!newString.isEmpty()) {
item1.setControl(list1);
list1.setVisible(true);
} else {
item1.setControl(list);
list.setVisible(true);
}
}
});

或者另一种方法:

btn.addListener (SWT.Selection,  new Listener() {           
public void handleEvent(Event e) {
if (newString != null && !newString.isEmpty()) {
if (item1.getControl() != list1) {
item1.setControl(list1);
}
} else {
if (item1.getControl() != list) {
item1.setControl(list);
}
}
}
});

我希望这能满足您的需求。

关于java - 当 SWT 中 tabItem 列表发生更改时,TabItem 不会刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27701389/

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