まだ解決策を探しています
次の問題があります。SWTを使用GC
して、GraphNodesに含まれる図形をZestグラフに描画します。LinuxとMacOSに関する限り、すべてが正常に機能します。しかし、Windowsでjarを実行すると、ノードが非常に奇妙に見えます。色が正しくペイントされておらず、透明度がありません(を介して達成setAlpha()
)GC
。
これが私の問題を説明するための2つのスクリーンショットです:
Linux:
ウィンドウズ:
編集:
テストするために、この実用的な「ミニ」の例を作成しました。なぜ長方形が窓に黒いのか、誰かが考えているなら、私は答えをいただければ幸いです。これがback.png
画像です:
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.ToolbarLayout;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.zest.core.widgets.Graph;
import org.eclipse.zest.core.widgets.GraphNode;
import org.eclipse.zest.core.widgets.IContainer;
public class MiniExample
{
public static void main(String[] args)
{
Display display = Display.getDefault();
Shell shell = new Shell(display);
Graph graph = new Graph(shell, SWT.NONE);
graph.setSize(100, 100);
CustomFigure fig = new CustomFigure(new Label());
fig.setSize(-1, -1);
CustomNode node = new CustomNode(graph, SWT.NONE, fig);
node.setLocation(5, 5);
shell.pack();
shell.open();
while(!shell.isDisposed())
{
if(!display.readAndDispatch())
display.sleep();
}
}
/* Minimal helper class for the figure */
static class CustomFigure extends Figure
{
private Image background = new Image(Display.getDefault(), "back.png");
private GC gcBack = new GC(background);
private Label all = new Label(background);
private Color blau = new Color(Display.getDefault(), 19, 59, 94);
public CustomFigure(Label label)
{
ToolbarLayout layout = new ToolbarLayout();
setLayoutManager(layout);
setMiddle(3);
add(all);
}
/* The problem has to occur somewhere here... */
public void setMiddle(int value)
{
gcBack.setBackground(blau);
gcBack.setForeground(blau);
gcBack.setAlpha(255);
/* color background blue and draw the nr of connections */
gcBack.drawRoundRectangle(6, 6, 15, 15, 3, 3);
gcBack.fillRoundRectangle(6, 6, 15, 15, 3, 3);
gcBack.setForeground(ColorConstants.white);
gcBack.drawText(value+"", 9, 6, true);
gcBack.setAlpha(255);
all.repaint();
}
}
/* Minimal helper class for the node */
static class CustomNode extends GraphNode
{
public CustomNode(IContainer graphModel, int style, CustomFigure figure)
{
super(graphModel, style, figure);
}
@Override
protected IFigure createFigureForModel()
{
return (IFigure) this.getData();
}
}
}