Java 如何在别处绘制不可见的JFrame?
我想在另一个框架上绘制JFrame的内容。目前,我只在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 其他信息:
在我的项目中,我需要能够旋转和缩放窗口。我不想编写自己的窗口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 for1)您必须使用正确的,而不是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或通过图形配置,并在复制之前在其上绘制。