有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (3) 个答案

  1. # 1 楼答案

    我遇到了一个post on java.net包含可见性选项,包括这个使用私有AWT API的选项

    public class TransparentFrame {
      private static final float OPAQUE = 1.0f;
      private static final float TRANSLUCENT = 0.1f;
    
      public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600, 400);
        frame.addMouseListener(new MouseAdapter() {
          @Override
          public void mouseEntered(MouseEvent e) {
            com.sun.awt.AWTUtilities.setWindowOpacity(frame, OPAQUE);
          }
    
          @Override
          public void mouseExited(MouseEvent e) {
            com.sun.awt.AWTUtilities.setWindowOpacity(frame, TRANSLUCENT);
          }
        });
        frame.setVisible(true);
      }
    }
    

    这对于玩具代码来说是可以的,但显然我不会使用私有的com.sun类来编写可移植的生产代码

  2. # 2 楼答案

    更新:方法与之前相同,但有更明确的逐步解释

    其他受访者想知道你想用它实现什么,并质疑一款突然向用户跳起来的应用背后的设计。我想这是一个你有多死定决心完全按照你描述的方式实现这个功能的问题。这项技术本身可能也有其他用途,这也是我对这个答案进行新的、改进的修订的主要动机


    据我所知,一个不可见的框架无法捕捉鼠标事件。所以它不知道鼠标是否在里面

    这个问题有一个漏洞:如果你让你的框架是可见的,但没有边界且完全透明,那么它在技术意义上是可见的,但在实际应用中用户是看不见的

    无边界部分很简单:setUndecorated(true)

    如果JFrame有一个像setOpaque()setTranslucent()这样的方法,你可以让它完全透明,那就太好了,但可惜的是,它没有

    另一个答案提到了一个基于Sun私有类的解决方案,它允许您使窗口透明。这将适用于当前和可能不久的将来的Sun JRE,但远不能保证适用于其他和未来的JRE,所以我不能推荐它。Sun明确建议不要以这种方式使用他们的私人课程

    还有另一种有点骇人听闻的替代方案:框架完全可见,但它会显示其后面屏幕的截图图像。因为这意味着我们实际上是在看整个画面,它实际上是看不见的。这里描述了这个解决方案:http://onjava.com/pub/a/onjava/excerpt/swinghks_hack41/index.html?CMP=OTC-FP2116136014。作者和我都承认这有点笨拙;它还涉及到很多不必要的代码。但它是基于标准Java编码的,在1.4版以上的许多Java环境中应该不受影响地支持

    本技巧介绍了如何创建一个Component来显示屏幕背景。当你想让框架不可见时,这很好,但是当你想让它正常可见时,会发生什么呢

    要做的事情是给JFrameContentPanea CardLayout添加TransparentBackground组件和预期的主要可见组件(可能是JPanel)。通过这种设置,在“不可见”和“可见”之间切换只涉及:

    • setUndecorated(false)//(真)
    • cardLayout.last()//(第一)

    当然,这种切换将由可以添加到JFrame的MouseListener控制

  3. # 3 楼答案

    在我看来,有一种相当简单的方法可以确定鼠标在屏幕上的位置(我认为这与Toolkit有关)。现在,如果你能结合一种方法来找出你的帧在屏幕上的位置(如果你还不知道的话),你就有了你的解决方案

    我很好奇你想做什么