我想绘制一个JFrame的内容到另一个框架。目前,如果JFrame可见,我只会让它工作。
有没有办法绘制隐藏的JFrame?如何在其他地方绘制隐形JFrame?
附加信息:
在我的项目中,我需要能够旋转和缩放窗口。我不想写自己的window-api,所以我想我可能只是以旋转的方式绘制JFrame或类似的容器类(Graphics2D-API支持得非常好)。这将是真棒,以便能够使用标准JFrames了,只延长一个JFrame定制的框架也将是OK ..
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);
}
}
我不知道你是什么意思*“在别处画一个隐形的JFrame”* [原文如此]我真的*不认为这是你的问题的解决方案。现在:你*可以*在Java中显示完全透明的窗口**,但是**有陷阱。在OS X Apple JVM上,它始终得到支持(即使在旧的OS X版本中:肯定可以在OS X 10.4上运行)。在Windows上,如果我没有弄错的话,有非官方的API(其方法可能会改变/消失),因为JVM 1.6.0_22。否则,您可以使用JNA在Windows/OS X/Linux /等上获得您想要的任何级别的透明度。JNA附带了一个透明度示例。 – TacticalCoder
我想获得一个框架的图形内容,而不必让框架对用户可见。 – bit
@bit这听起来像你想复制到一个框架之前的某种缓冲区绘制。在这种情况下,请查看[BufferStrategy]的用法(http://download.oracle.com/javase/7/docs/api/java/awt/image/BufferStrategy.html)。或者通过GraphicsConfiguration创建一些BufferedImage或[VolatileImage](http://download.oracle.com/javase/7/docs/api/java/awt/image/VolatileImage.html)并在复制之前对其进行绘制。 –