我刚开始使用swt的画布。我的印象是从图形控制器(gc)绘制命令可以在连接到画布的任何侦听器中执行。我猜虽然,我的问题是什么触发了油漆监听器方法paintControl
?Java swt canvas油漆侦听器如何工作?
canvas.redraw()
是否也会导致它运行?
感谢任何能指引我朝着正确方向的人。如果有关于这个问题的教程或书籍(通常也用swt绘图),我很乐意听到他们的消息。
编辑: 这是代码,我遇到了graphCanvas没有填充多余的垂直空间的问题?当我填充过多的水平空间时它也不起作用。但是,当我将这些属性应用于复合材料时,它似乎起作用。任何想法?
Color black = Display.getCurrent().getSystemColor(SWT.COLOR_BLACK);
chartComposite = new Composite(parent, SWT.NONE);
GridLayout chartGridLayout = new GridLayout(1,false);
GridData chartGridData = new GridData();
chartGridData.grabExcessHorizontalSpace = true;
chartGridData.grabExcessVerticalSpace = true;
chartComposite.setLayout(chartGridLayout);
chartComposite.setLayoutData(chartGridData);
chartInnerComposite = new Composite(chartComposite, SWT.NONE);
GridLayout chartInnerGridLayout = new GridLayout(2,false);
GridData chartInnerGridData = new GridData();
chartInnerGridData.grabExcessHorizontalSpace = true;
chartInnerGridData.grabExcessVerticalSpace = true;
chartInnerComposite.setLayout(chartInnerGridLayout);
chartInnerComposite.setLayoutData(chartInnerGridData);
/**
* Create the four canvases
*/
Canvas yCanvas = new Canvas(chartInnerComposite, SWT.None);
graphCanvas = new Canvas(chartInnerComposite, SWT.None);
GridLayout graphGridLayout = new GridLayout(1, false);
graphGridLayout.makeColumnsEqualWidth = false;
GridData graphGridData = new GridData(SWT.FILL);
graphGridData.widthHint = 400;
graphGridData.grabExcessVerticalSpace = true;
graphCanvas.setLayout(graphGridLayout);
graphCanvas.setLayoutData(graphGridData);
graphCanvas.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
e.gc.drawLine(20, 20, 500, 500);
e.gc.drawRectangle(0, 0, graphCanvas.getSize().x -1, graphCanvas.getSize().y -1);
e.gc.drawLine(0, 40, 500, 500);
e.gc.drawLine(0, 0, 0, 1200);
e.gc.drawLine(0, 0, 1200, 0);
}
});
/*graphCanvas.setSize(400, 400);
graphCanvas.redraw();
graphCanvas.update();*/
Canvas filler = new Canvas(chartInnerComposite, SWT.NONE);
Canvas xCanvas = new Canvas(chartInnerComposite, SWT.None);
我不明白你最后的问题。你能否提供一个SSCCE(http://sscce.org/)?然后我可以自己运行它并尝试帮助你。 – Baz
我能够使用widthHint和heightHint为画布指定手动大小。但我无法让画布伸展过多的垂直和水平空间。 –
你应该真的提供一个SSCCE。否则,我将不得不猜测发生了什么问题...... – Baz