Java Windows 7似乎破坏了SWT控制。打印(GC)
在SWT中归档并修复了一个bug(超快速): 首先,我的目标是将这两幅图像打印到画布上,这样我就可以制作画布在屏幕上滑动的动画(想想iPhone),滑动控件本身占用的CPU太多,所以在我在Win7上测试之前,这是一个很好的替代方案。我愿意接受任何能帮助我解决最初问题的方法,而不必解决下面的问题 有人知道如何获得“Control.print(GC)”来使用Windows7 Aero吗?当Aero被禁用时,我的代码在Windows XP和Windows 7中运行良好,但是命令: 打印(GC)导致非顶部控件从屏幕上有效删除Java Windows 7似乎破坏了SWT控制。打印(GC),java,eclipse,swt,Java,Eclipse,Swt,在SWT中归档并修复了一个bug(超快速): 首先,我的目标是将这两幅图像打印到画布上,这样我就可以制作画布在屏幕上滑动的动画(想想iPhone),滑动控件本身占用的CPU太多,所以在我在Win7上测试之前,这是一个很好的替代方案。我愿意接受任何能帮助我解决最初问题的方法,而不必解决下面的问题 有人知道如何获得“Control.print(GC)”来使用Windows7 Aero吗?当Aero被禁用时,我的代码在Windows XP和Windows 7中运行良好,但是命令: 打印(GC)导致非
GC gc = new GC(image);
try {
// As soon as this code is called, calling "layout" on the controls
// causes them to disappear.
control.print(gc);
} finally {
gc.dispose();
}
我有堆叠的控件,希望打印来自当前和下一个控件的图像,以便我可以将它们“滑出”屏幕。但是,在打印非顶部控件时,将不再重新绘制该控件
下面是一些示例代码。(有趣的代码位位于顶部,需要指向SWT才能工作。)
谢谢你的帮助。作为一种解决办法,我正在考虑在打印之间交换控件,看看这是否有帮助,但我不想这样做
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
public class SWTImagePrintTest {
private Composite stack;
private StackLayout layout;
private Label lblFlip;
private Label lblFlop;
private boolean flip = true;
private Button buttonFlop;
private Button buttonPrint;
/**
* Prints the control into an image
*
* @param control
*/
protected void print(Control control) {
Image image = new Image(control.getDisplay(), control.getBounds());
GC gc = new GC(image);
try {
// As soon as this code is called, calling "layout" on the controls
// causes them to disappear.
control.print(gc);
} finally {
gc.dispose();
}
}
/**
* Swaps the controls in the stack
*/
private void flipFlop() {
if (flip) {
flip = false;
layout.topControl = lblFlop;
buttonFlop.setText("flop");
stack.layout();
} else {
flip = true;
layout.topControl = lblFlip;
buttonFlop.setText("flip");
stack.layout();
}
}
private void createContents(Shell shell) {
shell.setLayout(new GridLayout(2, true));
stack = new Composite(shell, SWT.NONE);
GridData gdStack = new GridData(GridData.FILL_BOTH);
gdStack.horizontalSpan = 2;
stack.setLayoutData(gdStack);
layout = new StackLayout();
stack.setLayout(layout);
lblFlip = new Label(stack, SWT.BOLD);
lblFlip.setBackground(Display.getCurrent().getSystemColor(
SWT.COLOR_CYAN));
lblFlip.setText("FlIp");
lblFlop = new Label(stack, SWT.NONE);
lblFlop.setBackground(Display.getCurrent().getSystemColor(
SWT.COLOR_BLUE));
lblFlop.setText("fLoP");
layout.topControl = lblFlip;
stack.layout();
buttonFlop = new Button(shell, SWT.FLAT);
buttonFlop.setText("Flip");
GridData gdFlip = new GridData();
gdFlip.horizontalAlignment = SWT.RIGHT;
buttonFlop.setLayoutData(gdFlip);
buttonFlop.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
flipFlop();
}
});
buttonPrint = new Button(shell, SWT.FLAT);
buttonPrint.setText("Print");
GridData gdPrint = new GridData();
gdPrint.horizontalAlignment = SWT.LEFT;
buttonPrint.setLayoutData(gdPrint);
buttonPrint.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
print(lblFlip);
print(lblFlop);
}
});
}
/**
* @param args
*/
public static void main(String[] args) {
Shell shell = new Shell();
shell.setText("Slider Test");
shell.setSize(new Point(800, 600));
shell.setLayout(new GridLayout());
SWTImagePrintTest tt = new SWTImagePrintTest();
tt.createContents(shell);
shell.open();
Display display = Display.getDefault();
while (shell.isDisposed() == false) {
if (display.readAndDispatch() == false) {
display.sleep();
}
}
display.dispose();
}
}
这是一个错误的结果:
它已经修好了。希望SWT的新打包版本很快就会问世,这样我们就可以正式使用它了。这是一个bug的结果:
它已经修好了。希望SWT的一个新的打包版本很快就会问世,这样我们就可以正式使用它了。注意,它似乎完全与Win7 Aero中不在堆栈顶部的控件有关。如果我把它放在堆栈的顶部,那么我就可以在没有问题的情况下打印它。但是,它在滑出屏幕之前会闪烁。注意,这似乎完全与Win7 Aero中不在堆栈顶部的控件有关。如果我把它放在堆栈的顶部,那么我就可以在没有问题的情况下打印它。然而,它在从屏幕上滑下之前会闪烁。我将检查我自己的代码,看看它是否在Windows7下受到影响。我将检查我自己的代码,看看它是否在Windows7下受到影响。