【问题标题】:Java - Set JFrame Opacity from JMenuItemJava - 从 JMenuItem 设置 JFrame 不透明度
【发布时间】:2018-06-14 15:32:15
【问题描述】:

我现在正在尝试将 JFrame 的不透明度设置为 JMenuItem 的 50%。 我的最后一次尝试是这样的:

op50.addActionListener((ActionEvent y) -> {
        setUndecorated(true);
        AWTUtilities.setWindowOpacity(this, 0.5F);
    });

但无论我在做什么,都会遇到 java.awt.IllegalComponentStateException 错误并显示消息:框架是可显示的。

我不知道该怎么做,所以请帮助我。

【问题讨论】:

  • 当 JFrame 已经可见时,您无法设置更改其不透明度
  • 展示一个完整的例子,相信是可以的。 minimal reproducible example
  • 您需要先 dispose 框架,以便释放它对本机对等方的引用(使其成为 displayable),(可能)创建框架的新实例,应用不透明度,然后再次显示。您的下一个问题是,您不能使具有原生装饰的窗口透明:P
  • 这可能会对您有所帮助。 stackoverflow.com/questions/875132/…

标签: java swing jframe opacity


【解决方案1】:

如果没有完整的代码示例,就不可能知道哪里出错了,但这里有一个示例,说明如何从 JMenuItem 中做到这一点。 *来自 cmets 的注意事项,这不适用于 Java 1.6。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

import com.sun.awt.AWTUtilities;

public class Main
{
    public static void main(String[] args)
    {
        final JFrame frame = new JFrame();

        JMenuBar menuBar = new JMenuBar();

        JMenu menu = new JMenu("Menu");
        menuBar.add(menu);

        JMenuItem menuItem = new JMenuItem("Change Opacity");
        menuItem.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                AWTUtilities.setWindowOpacity(frame, 0.5F);
            }
        });

        menu.add(menuItem);

        frame.setJMenuBar(menuBar);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

【讨论】:

  • 你运行代码了吗?它以与 OP 当前问题完全相同的方式结束
  • @MadProgrammer 是的,我确实运行了代码。我想知道它是否取决于java版本?我碰巧用的是1.6.0_25。
  • 果然适用于 1.6 但不适用于 1.7 或 1.8。我不会改变外观和感觉 - 仅使用显示的代码运行。
  • 我正在运行 Java 8,根据我的经验,它从来没有用过 - 您使用的是默认外观吗?
  • 由于 Java 1.6 和 1.7 都超出了“生命终结”的支持范围,我个人认为这无关紧要。您可以记录这一事实,但由于 OP 遇到了上述问题,我认为他们没有使用 1.6
猜你喜欢
  • 2017-01-25
  • 1970-01-01
  • 2011-04-03
  • 2016-05-15
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
  • 2016-05-23
  • 2012-07-27
相关资源
最近更新 更多