【发布时间】:2011-07-20 17:28:47
【问题描述】:
我在我的 SWT Gui 中使用带有图像的按钮,有时我不得不禁用它们。
这让 SWT 从我之前放置在按钮上的彩色图像创建一个自动禁用的图像,并且禁用的图标真的看起来并不漂亮。我想在按钮上放置我自己的禁用图像,但我找不到这样做的方法。
有吗?
【问题讨论】:
我在我的 SWT Gui 中使用带有图像的按钮,有时我不得不禁用它们。
这让 SWT 从我之前放置在按钮上的彩色图像创建一个自动禁用的图像,并且禁用的图标真的看起来并不漂亮。我想在按钮上放置我自己的禁用图像,但我找不到这样做的方法。
有吗?
【问题讨论】:
您不能将 Button 子类化,因此您需要在启用/禁用按钮时进行。我找不到 SWT -> Windows 事件映射 ID 以在按钮上调用 addListener 以使其更通用。
public static void main(String[] args) throws Exception
{
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, true));
final Image image1 = new Image(null, new FileInputStream(
"C:\\tmp\\enabled.png"));
final Image image2 = new Image(null, new FileInputStream(
"C:\\tmp\\disabled.png"));
final Button button= new Button(shell, SWT.NONE);
button.setText("Hello World SWT");
button.setImage(image1);
button.pack();
final Button cb = new Button(shell, SWT.CHECK);
cb.setText("Check me");
cb.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent event)
{
button.setEnabled(!cb.getSelection());
if (button.isEnabled())
button.setImage(image1);
else
button.setImage(image2);
}
});
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
【讨论】:
另一个提示可能会或可能不会为您节省很多麻烦。确保图像上透明部分的 Alpha 级别一直为零,尤其是在边缘附近,并且标准默认禁用外观可能看起来要好得多。
【讨论】:
我通过修改 Button 类本身解决了我的问题。它现在缓存禁用的图像,并在需要时重复使用它们。
【讨论】: