我无法获取GC (图形上下文)对象,在画布上绘制一个简单的矩形,我弄不清楚我缺少了什么... 考虑这个简单的代码片段:
这将不会绘制任何东西:
而且这也不会:
所以,在图像上绘制没有问题,但在shell/canvas上绘制不会产生任何东西...
我错过了什么?我不应该能够在任何Drawable上绘制吗?
public class MainWindow {
private Display display;
private Shell shell;
public static void main(String args[]) {
MainWindow mw=new MainWindow();
mw.render();
}
public MainWindow() {
display=Display.getDefault();
shell=new Shell(display, SWT.DIALOG_TRIM);
shell.setText("Graphic Test");
shell.setSize(400,300);
shell.setLocation(0, 0);
GC gc=new GC(shell);
gc.drawRectangle(50,50,45,45);
gc.dispose();
}
public void render() {
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
这将不会绘制任何东西:
![enter image description here](https://istack.dev59.com/n9liK.webp)
public class MainWindow {
private Display display;
private Shell shell;
public static void main(String args[]) {
MainWindow mw=new MainWindow();
mw.render();
}
public MainWindow() {
display=Display.getDefault();
shell=new Shell(display, SWT.DIALOG_TRIM);
shell.setText("Graphic Test");
shell.setSize(400,300);
shell.setLocation(0, 0);
Canvas canvas=new Canvas(shell, SWT.NONE);
canvas.setSize(shell.getSize().x, shell.getSize().y);
GC gc=new GC(canvas);
gc.drawRectangle(50,50,45,45);
gc.dispose();
}
public void render() {
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
当我设置画布的背景图像并在图像上绘制时,请注意发生的情况:
public class MainWindow {
private Display display;
private Shell shell;
public static void main(String args[]) {
MainWindow mw=new MainWindow();
mw.render();
}
public MainWindow() {
display=Display.getDefault();
shell=new Shell(display, SWT.DIALOG_TRIM);
shell.setText("Graphic Test");
shell.setSize(400,300);
shell.setLocation(0, 0);
Image background=new Image(display, "background.jpg");
Canvas canvas=new Canvas(shell, SWT.NONE);
canvas.setBackgroundImage(background);
canvas.setSize(shell.getSize().x, shell.getSize().y);
GC gc=new GC(background);
gc.drawRectangle(50,50,45,45);
gc.dispose();
}
public void render() {
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
所以,在图像上绘制没有问题,但在shell/canvas上绘制不会产生任何东西...
我错过了什么?我不应该能够在任何Drawable上绘制吗?