С SWT org.eclipse.swt.layout.FillLayout
ваш paint event listener
не вызывается , и поэтому ваша граница не прорисовывается.
Причина в том, что вы используете FillLayout
следующим образом:
FillLayout fillLayout = new FillLayout();
composite.setLayout(fillLayout);
Тогда вы не устанавливаете никаких дополнительных украшений, таких как indentation
, margin
и т. Д. И, следовательно, уровень ОС update
не вызывается в вашем окне.
Если вы хотите, чтобы оно работало , тогда установите некоторые дополнительные данные макета, такие как marginHeight
.Например:
FillLayout fillLayout = new FillLayout();
fillLayout.marginHeight = 5;
composite.setLayout(fillLayout);
Вот как это выглядит после установки вышеуказанного оформления макета (обратите внимание на верхнюю границу):
>>Code
Я добавил несколько комментариев.Попробуйте удалить комментарий и посмотрите, как он себя ведет.
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
public class FillLayoutTest
{
public static void main(String[] args)
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout()); shell.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
final Color c = new Color(display, new RGB(127, 127, 127));
final Composite composite = new Composite(shell, SWT.NONE);
FillLayout fillLayout = new FillLayout();
fillLayout.marginHeight = 5;
composite.setLayout(fillLayout);
//composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
new Label(composite, SWT.BORDER).setText("Hello World!!");
new Label(composite, SWT.BORDER).setText("Hello World Version 2.0!!");
composite.addPaintListener(new PaintListener(){
public void paintControl(PaintEvent e) {
e.gc.setForeground(c);
e.gc.drawLine(0, 0, composite.getParent().getBounds().width, 0);
//throw new RuntimeException();
}
});
shell.open();
shell.pack();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
if(c != null && !c.isDisposed())
c.dispose();
if(display != null && !display.isDisposed())
display.dispose();
}
}