为 RCP 显示 SWT 组合的问题
Issue in displaying of SWT composite for RCP
我正在我的 Eclipse RCP 应用程序中创建一个简单的 SWT 容器,但在显示它的 location/order 时遇到了问题。这是我正在使用的代码。
@PostConstruct
public void createControls(Composite parent)
{
parent.setBackground(new Color (Display.getCurrent (), 255, 144, 0));
GridData parentData = new GridData(SWT.FILL, SWT.FILL, true, true);
parent.setLayout(new GridLayout(1, true));
parent.setLayoutData(parentData);
Device device = Display.getCurrent ();
Color backgroundColor = parent.getBackground();
Color whiteColor = new Color (device, 255, 255, 255);
Color randomColor = new Color (device, 255, 0, 0);
final Composite criteriaContainer = new Composite(parent, SWT.BORDER);
criteriaContainer.setBackground(randomColor);
final GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
final GridData comboGridData = new GridData(SWT.FILL, SWT.TOP, true, false,1,1);
criteriaContainer.setLayout(new GridLayout(1, false));
criteriaContainer.setLayoutData(gridData);
final Label primaryComboLabel = new Label(criteriaContainer, SWT.NONE);
primaryComboLabel.setLayoutData(comboGridData);
primaryComboLabel.setForeground(whiteColor);
primaryComboLabel.setText("View by:");
criteriaContainer.layout();
criteriaContainer.pack();
parent.layout();
parent.pack();
}
我似乎无法让标签出现在应用程序的顶部(出现在底部中心)[在此处输入图像描述][1]。如果我编写相同的代码并将其作为独立的 SWT 应用程序执行,标签将出现在左上角。 [1]: http://i.stack.imgur.com/OL312.png
这是我有一个独立的 swt 应用程序时的区别。
public void showHistoryContainer() throws Exception {
Display display = new Display();
final Shell shell = new Shell(display);
shell.setBackground(new Color (Display.getCurrent (), 255, 144, 0));
其余代码相同。 [2]: http://i.stack.imgur.com/fJmR6.png
知道为什么会发生这种情况吗?
注意:在我的 RCP 应用程序中,我没有对我的父组合进行任何其他处理。
你不说 createControls
是什么的一部分。是 MPart
吗?
我无法真正重现此问题,但您的代码中存在许多问题可能会导致此问题。
从不 更改传递给代码的 Composite
的布局(此处为 parent
)。创建另一个 Composite
作为子项并在其上设置布局。
不要调用 layout
和 pack
。
所以我简化了你的代码:
@PostConstruct
public void postConstruct(Composite parent)
{
Display device = parent.getDisplay();
Composite body = new Composite(parent, SWT.NONE);
body.setBackground(new Color(device, 255, 144, 0));
body.setLayout(new GridLayout());
Color whiteColor = new Color(device, 255, 255, 255);
Color randomColor = new Color(device, 255, 0, 0);
Composite criteriaContainer = new Composite(body, SWT.BORDER);
criteriaContainer.setBackground(randomColor);
criteriaContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
criteriaContainer.setLayout(new GridLayout());
Label primaryComboLabel = new Label(criteriaContainer, SWT.NONE);
primaryComboLabel.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
primaryComboLabel.setForeground(whiteColor);
primaryComboLabel.setText("View by:");
}
最后,如果您像这样创建 Color
对象,您必须安排处置它们,否则您将泄漏资源。如果这是 e4 RCP,您应该改用 CSS 支持。
我正在我的 Eclipse RCP 应用程序中创建一个简单的 SWT 容器,但在显示它的 location/order 时遇到了问题。这是我正在使用的代码。
@PostConstruct
public void createControls(Composite parent)
{
parent.setBackground(new Color (Display.getCurrent (), 255, 144, 0));
GridData parentData = new GridData(SWT.FILL, SWT.FILL, true, true);
parent.setLayout(new GridLayout(1, true));
parent.setLayoutData(parentData);
Device device = Display.getCurrent ();
Color backgroundColor = parent.getBackground();
Color whiteColor = new Color (device, 255, 255, 255);
Color randomColor = new Color (device, 255, 0, 0);
final Composite criteriaContainer = new Composite(parent, SWT.BORDER);
criteriaContainer.setBackground(randomColor);
final GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false);
final GridData comboGridData = new GridData(SWT.FILL, SWT.TOP, true, false,1,1);
criteriaContainer.setLayout(new GridLayout(1, false));
criteriaContainer.setLayoutData(gridData);
final Label primaryComboLabel = new Label(criteriaContainer, SWT.NONE);
primaryComboLabel.setLayoutData(comboGridData);
primaryComboLabel.setForeground(whiteColor);
primaryComboLabel.setText("View by:");
criteriaContainer.layout();
criteriaContainer.pack();
parent.layout();
parent.pack();
}
我似乎无法让标签出现在应用程序的顶部(出现在底部中心)[在此处输入图像描述][1]。如果我编写相同的代码并将其作为独立的 SWT 应用程序执行,标签将出现在左上角。 [1]: http://i.stack.imgur.com/OL312.png 这是我有一个独立的 swt 应用程序时的区别。
public void showHistoryContainer() throws Exception {
Display display = new Display();
final Shell shell = new Shell(display);
shell.setBackground(new Color (Display.getCurrent (), 255, 144, 0));
其余代码相同。 [2]: http://i.stack.imgur.com/fJmR6.png
知道为什么会发生这种情况吗?
注意:在我的 RCP 应用程序中,我没有对我的父组合进行任何其他处理。
你不说 createControls
是什么的一部分。是 MPart
吗?
我无法真正重现此问题,但您的代码中存在许多问题可能会导致此问题。
从不 更改传递给代码的 Composite
的布局(此处为 parent
)。创建另一个 Composite
作为子项并在其上设置布局。
不要调用 layout
和 pack
。
所以我简化了你的代码:
@PostConstruct
public void postConstruct(Composite parent)
{
Display device = parent.getDisplay();
Composite body = new Composite(parent, SWT.NONE);
body.setBackground(new Color(device, 255, 144, 0));
body.setLayout(new GridLayout());
Color whiteColor = new Color(device, 255, 255, 255);
Color randomColor = new Color(device, 255, 0, 0);
Composite criteriaContainer = new Composite(body, SWT.BORDER);
criteriaContainer.setBackground(randomColor);
criteriaContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
criteriaContainer.setLayout(new GridLayout());
Label primaryComboLabel = new Label(criteriaContainer, SWT.NONE);
primaryComboLabel.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
primaryComboLabel.setForeground(whiteColor);
primaryComboLabel.setText("View by:");
}
最后,如果您像这样创建 Color
对象,您必须安排处置它们,否则您将泄漏资源。如果这是 e4 RCP,您应该改用 CSS 支持。