私はキャンバス上のイメージを持っている:GUIボタンが押されるとはSWTのJava:キャンバス上のイメージの上に長方形の選択急速な再描画せずに
canvas = new Canvas(top, SWT.V_SCROLL | SWT.H_SCROLL | SWT.NO_REDRAW_RESIZE);
GridData canvasGridData = new GridData(GridData.VERTICAL_ALIGN_FILL);
canvasGridData.verticalSpan = 15;
canvasGridData.horizontalAlignment = GridData.FILL;
canvasGridData.verticalAlignment = GridData.FILL;
canvasGridData.grabExcessHorizontalSpace = true;
canvasGridData.grabExcessVerticalSpace = true;
canvas.setLayoutData(canvasGridData);
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
if (buttonPressed) {
GC gc = e.gc;
image = GetMyImagetoDisplay();
gc.drawImage(image, 10, 10);
}
}
});
、再描画()と呼ばれ、イメージがロードされます。
また、長方形の選択を取得するためのマウスイベントがあります。彼らは、画像上の矩形の選択を描く: canvas.addListener(SWT.MouseDown、新しいリスナー(){
@Override
public void handleEvent(Event event) {
startX = event.x;
startY = event.y;
drag = true;
}
});
canvas.addListener(SWT.MouseUp, new Listener() {
@Override
public void handleEvent(Event event) {
endX = event.x;
endY = event.y;
drag = false;
canvas.redraw();
}
});
canvas.addListener(SWT.MouseMove, new Listener() {
@Override
public void handleEvent(Event event) {
if(drag)
{
endX = event.x;
endY = event.y;
canvas.redraw();
}
}
});
canvas.addListener(SWT.Paint, new Listener() {
@Override
public void handleEvent(Event event) {
if(drag)
{
GC gc = event.gc;
//gc.setBackground(top.getDefault().getSystemColor(SWT.COLOR_BLACK));
gc.setAlpha(128);
int minX = Math.min(startX, endX);
int minY = Math.min(startY, endY);
int maxX = Math.max(startX, endX);
int maxY = Math.max(startY, endY);
int width = maxX - minX;
int height = maxY - minY;
gc.fillRectangle(minX, minY, width, height);
}
}
});
問題は私は全体でマウスをドラッグすると、画像がフリッカ保持していること、である
。あなたが修正を提案することができ
更新:?
をキャンバスコンストラクタにSWT.DOUBLE_BUFFEREDを渡すことで、ダブルバッファリングを有効に!!!
imageCanvas = new Canvas(top, SWT.V_SCROLL | SWT.H_SCROLL | SWT.NO_REDRAW_RESIZE | SWT.DOUBLE_BUFFERED);
フリッカ効果を取り除くので、重バッファするために、このコードは私のMac上で以下のランよりますが、マックのデフォルトを言うためだけのノートは、おそらくちらつきと2人のペイントリスナーを扱っています。 2番目のペイントリスナーで背景色を元に戻す必要がありました。 –
良い点 - 私は2人のリスナーをマージしました。残念ながら、それはまだちらつきます。それは私がマウスの動きごとに画像を追加するためです。矩形の選択を処理するためにウィジェットをオーバーレイする必要があるかもしれません –
@Robben_Ford_Fan_boyダブルバッファリングを試みましたか? – Baz