我想繪製一個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)並在複製之前對其進行繪製。 –