Java SWT - 禁用按钮上的图像

3

我在我的SWT Gui中使用带有图像的按钮,有时需要禁用它们。

这会让SWT从我之前放置在按钮上的彩色图像创建一个自动禁用的图像,而禁用的图标看起来并不好看。我想在按钮上放置自己的禁用图像,但我找不到方法。

有吗?

3个回答

2

你无法对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();
}

SWT会“禁用”你的image2。但除此之外,这应该可以工作。 - Gilbert Le Blanc
+1 这看起来不错。不幸的是,资源分配仍然发生在按钮类中,而我想把它放出来。我相信我将不得不修改按钮类,以使其更好。 - Daniel
@Gilbert 这是正确的。如果他不想让它变灰,他可以添加一个SWT.Paint监听器并自己绘制图像。 - Andrew T Finnell
1
对我来说,这似乎是太多的工作了,但你和丹尼尔可以自己试试。 :-) - Gilbert Le Blanc

0

我通过修改Button类本身来解决了我的问题。现在它会缓存禁用的图像,并在需要时重复使用它们。


0
另一个可能会为您节省很多麻烦的提示是确保图像的 alpha 级别在透明部分全部降至零,特别是靠近边缘的部分,这样标准默认的禁用外观可能会更好看。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接