【问题标题】:Java SWT - Images on disabled buttonsJava SWT - 禁用按钮上的图像
【发布时间】:2011-07-20 17:28:47
【问题描述】:

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

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

有吗?

【问题讨论】:

    标签: java image button swt


    【解决方案1】:

    您不能将 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。但除此之外,这应该可行。
    • +1 这看起来不错。可悲的是,资源分配仍然发生在 Button 类中,我想把它放在那里。我将不得不修改我认为的按钮类,以使其更好。
    • @Gilbert 这是真的。如果他不想让它变灰,他可以添加一个 SWT.Paint 侦听器并自己绘制图像。
    • 对我来说似乎工作太多了,但你和丹尼尔可以把自己搞垮。 :-)
    【解决方案2】:

    另一个提示可能会或可能不会为您节省很多麻烦。确保图像上透明部分的 Alpha 级别一直为零,尤其是在边缘附近,并且标准默认禁用外观可能看起来要好得多。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-12-07
        • 2011-01-08
        • 1970-01-01
        • 2012-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-27
        • 1970-01-01
        相关资源
        最近更新 更多