Java 有没有办法缩放SWT组合及其';儿童
我想开发一个复合控件,理想情况下,它可以将自身扩展到“分配的大小” 我想显示一个数值和3个LED类型的图像。随着合成的大小增加,值的字体大小和图像的大小成比例增加 我似乎记得.NET的WPF中有类似的东西。在SWT中有这样做的方法吗Java 有没有办法缩放SWT组合及其';儿童,java,swt,Java,Swt,我想开发一个复合控件,理想情况下,它可以将自身扩展到“分配的大小” 我想显示一个数值和3个LED类型的图像。随着合成的大小增加,值的字体大小和图像的大小成比例增加 我似乎记得.NET的WPF中有类似的东西。在SWT中有这样做的方法吗 (我知道我可以添加一个设置页面并在那里设置字体大小。只是想找到一种自动完成的方法)好的,没有内置的方法来添加缩放功能。然而,你可以自己处理,不用做太多的工作 因此,您可以使用画布,自己绘制图像和文本,并对宽度和高度应用比例。此比例根据鼠标滚轮的移动而变化 以下是一个
(我知道我可以添加一个设置页面并在那里设置字体大小。只是想找到一种自动完成的方法)好的,没有内置的方法来添加缩放功能。然而,你可以自己处理,不用做太多的工作 因此,您可以使用
画布
,自己绘制图像和文本,并对宽度和高度应用比例。此比例根据鼠标滚轮的移动而变化
以下是一个例子:
private static float scale = 1;
private static Font font;
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new FillLayout());
final Image image = new Image(display, "button.png");
final Canvas canvas = new Canvas(shell, SWT.NONE);
canvas.addListener(SWT.Paint, new Listener()
{
private int initialFontSize = -1;
@Override
public void handleEvent(Event event)
{
Font tempFont = event.gc.getFont();
FontData data = tempFont.getFontData()[0];
if (initialFontSize == -1)
initialFontSize = tempFont.getFontData()[0].getHeight();
else
{
if(font != null && !font.isDisposed())
font.dispose();
data.setHeight((int)(initialFontSize * scale));
font = new Font(display, data);
event.gc.setFont(font);
}
Rectangle bounds = image.getBounds();
event.gc.drawImage(image, 0, 0, bounds.width, bounds.height, 0, 0, (int) (bounds.width * scale), (int) (bounds.height * scale));
event.gc.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
event.gc.drawText("Some text here", (int)(10 * scale), (int)(10 * scale), true);
}
});
canvas.addListener(SWT.MouseWheel, new Listener()
{
@Override
public void handleEvent(Event event)
{
if (event.count > 0)
scale += .2f;
else
scale -= .2f;
scale = Math.max(scale, 0);
canvas.redraw();
}
});
canvas.addListener(SWT.Dispose, new Listener()
{
@Override
public void handleEvent(Event event)
{
if (!image.isDisposed())
image.dispose();
if (!font.isDisposed())
font.dispose();
}
});
shell.pack();
shell.setSize(400, 200);
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
看起来像这样:
AFAIK没有内置的方法来添加缩放功能。然而,你可以自己处理,不用做太多的工作
因此,您可以使用画布
,自己绘制图像和文本,并对宽度和高度应用比例。此比例根据鼠标滚轮的移动而变化
以下是一个例子:
private static float scale = 1;
private static Font font;
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("StackOverflow");
shell.setLayout(new FillLayout());
final Image image = new Image(display, "button.png");
final Canvas canvas = new Canvas(shell, SWT.NONE);
canvas.addListener(SWT.Paint, new Listener()
{
private int initialFontSize = -1;
@Override
public void handleEvent(Event event)
{
Font tempFont = event.gc.getFont();
FontData data = tempFont.getFontData()[0];
if (initialFontSize == -1)
initialFontSize = tempFont.getFontData()[0].getHeight();
else
{
if(font != null && !font.isDisposed())
font.dispose();
data.setHeight((int)(initialFontSize * scale));
font = new Font(display, data);
event.gc.setFont(font);
}
Rectangle bounds = image.getBounds();
event.gc.drawImage(image, 0, 0, bounds.width, bounds.height, 0, 0, (int) (bounds.width * scale), (int) (bounds.height * scale));
event.gc.setForeground(display.getSystemColor(SWT.COLOR_WHITE));
event.gc.drawText("Some text here", (int)(10 * scale), (int)(10 * scale), true);
}
});
canvas.addListener(SWT.MouseWheel, new Listener()
{
@Override
public void handleEvent(Event event)
{
if (event.count > 0)
scale += .2f;
else
scale -= .2f;
scale = Math.max(scale, 0);
canvas.redraw();
}
});
canvas.addListener(SWT.Dispose, new Listener()
{
@Override
public void handleEvent(Event event)
{
if (!image.isDisposed())
image.dispose();
if (!font.isDisposed())
font.dispose();
}
});
shell.pack();
shell.setSize(400, 200);
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
看起来像这样:
+1-看起来这对于一个简单的例子来说很有效。我需要处理嵌套控件和布局(边距和填充)。我猜这是可以做到的…+1-看起来这对于一个简单的例子来说很有效。我需要处理嵌套控件和布局(边距和填充)。我想这是我能做到的。。。