Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在别处绘制不可见的JFrame?_Java_Swing_Jframe_Hidden_Paint - Fatal编程技术网

Java 如何在别处绘制不可见的JFrame?

Java 如何在别处绘制不可见的JFrame?,java,swing,jframe,hidden,paint,Java,Swing,Jframe,Hidden,Paint,我想在另一个框架上绘制JFrame的内容。目前,我只在JFrame可见的情况下才能使用它。有没有办法绘制隐藏的JFrame 其他信息:在我的项目中,我需要能够旋转和缩放窗口。我不想编写自己的窗口api,所以我想我可以只以旋转的方式绘制JFrames或类似的容器类(Graphics2D api非常支持这种方式)。能够使用标准JFrames将是非常棒的,但是扩展JFrame的自定义框架也可以 public class JFTest extends JFrame { private JFram

我想在另一个框架上绘制JFrame的内容。目前,我只在JFrame可见的情况下才能使用它。
有没有办法绘制隐藏的JFrame

其他信息:
在我的项目中,我需要能够旋转和缩放窗口。我不想编写自己的窗口api,所以我想我可以只以旋转的方式绘制JFrames或类似的容器类(Graphics2D api非常支持这种方式)。能够使用标准JFrames将是非常棒的,但是扩展JFrame的自定义框架也可以

public class JFTest extends JFrame {
    private JFrame frameToPaint = null;

    public static void main (String[] args) {
        new JFTest ();
    }

    public JFTest () {
        // some basic initialization
        super ("Container");
        setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        setExtendedState (JFrame.MAXIMIZED_BOTH);
        add (new JPanel () {
            @Override public void paintComponent (Graphics g) {
                super.paintComponent (g);
                // painting the child frame's contents onto this frame
                if (frameToPaint != null) frameToPaint.getRootPane().paintAll (g);
            }
        });
        setVisible (true);

        // initializing some test-frame that will get painted onto the container
        frameToPaint = new JFrame ("child");
        frameToPaint.setSize (200, 100);
        frameToPaint.add (new JLabel ("test"));
        frameToPaint.addComponentListener (new ComponentAdapter() {
            @Override public void componentResized (ComponentEvent e) { repaint (); }
            @Override public void componentHidden  (ComponentEvent e) { repaint (); }
        });

        // magic line. an invisible frame will not get painted! why??
        frameToPaint.setVisible (true);
    }
}
1) 您必须使用正确的,而不是
setSize()
setBounds()

2) 如果已使用,则
容器
返回
setVisible(true)之后的任何大小

3) 如果使用了正确的
LayoutManager
,则调用
pack()后
Container
返回其
Size
,在另一方面,此容器在屏幕上不可见(意思是
setVisible(true);

4) JComponents必须返回preferedSize for

1)您必须使用正确的,而不是
setSize()
setBounds()

2) 如果已使用,则
容器
返回
setVisible(true)之后的任何大小

3) 如果使用了正确的
LayoutManager
,则调用
pack()后
Container
返回其
Size
,在另一方面,此容器在屏幕上不可见(意思是
setVisible(true);


4) JComponents必须为

返回PreferedSize提示1:JFrame的setDefaultLookAndFeelDecorated(false)/setUndecorated(true)可能用于没有标题和边框的窗口


提示2:因为setGlassPane/setLayeredPane/set不透明(false)可能用于第二个“层”。

提示1:JFrame的setDefaultLookAndFeelDecorated(false)/setUndecorated(true)可能用于没有标题和边框的窗口

提示2:因为setGlassPane/setLayeredPane/setOqaque(false)可能用于第二个“层”


我希望获得框架的图形内容,而不必使框架对用户可见

这门课应该有帮助。尽管我认为它只适用于框架的“内容窗格”,而不适用于整个框架(带有标题栏和边框),除非使用装饰框架


我希望获得框架的图形内容,而不必使框架对用户可见


这门课应该有帮助。尽管我认为它只适用于框架的“内容窗格”,而不适用于整个框架(带有标题栏和边框),除非您使用装饰框架。

我不知道您所说的“在别处绘制不可见的JFrame”[sic]是什么意思,我真的不认为这是解决您问题的方法。现在:您可以在Java中显示完全半透明的窗口,但存在一些问题。在OSX苹果JVM上,它一直都是受支持的(即使在旧的OSX版本上:也可以在OSX10.4上使用)。在Windows上,如果我没有弄错的话,自JVM1.6.0_22以来,有一些非官方的API(其方法可能会改变/消失)。否则,您可以使用JNA在Windows/OS X/Linux/等上获得您想要的任何级别的透明度。JNA附带了一个透明度示例。我想获得一个框架的图形内容,而不必使该框架对用户可见。@bit听起来您在复制到一个框架之前需要某种缓冲区来绘制。在这种情况下,请研究如何使用。或者创建一些BuffereImage或通过图形配置,在复制之前在上面绘制。我不知道“在别处绘制不可见的JFrame”是什么意思[sic],我真的不认为这是解决问题的方法。现在:您可以在Java中显示完全半透明的窗口,但存在一些问题。在OSX苹果JVM上,它一直都是受支持的(即使在旧的OSX版本上:也可以在OSX10.4上使用)。在Windows上,如果我没有弄错的话,自JVM1.6.0_22以来,有一些非官方的API(其方法可能会改变/消失)。否则,您可以使用JNA在Windows/OS X/Linux/等上获得您想要的任何级别的透明度。JNA附带了一个透明度示例。我想获得一个框架的图形内容,而不必使该框架对用户可见。@bit听起来您在复制到一个框架之前需要某种缓冲区来绘制。在这种情况下,请研究如何使用。或者创建一些BuffereImage或通过图形配置,并在复制之前在其上绘制。