Я хочу нарисовать содержимое JFrame на другой фрейм. В настоящее время я могу заставить его работать, только если 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);
}
}
Я не знаю, что вы подразумеваете под * «нарисовать невидимый JFrame в другом месте» * [sic] и я * действительно * не думаю, что это решение вашей проблемы. Теперь: вы * можете * отображать полностью прозрачные окна в Java **, но ** есть gotchas. В OS X Apple JVM, он всегда поддерживался (даже в старых версиях ОС 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). Или создайте BufferedImage или [VolatileImage] (http://download.oracle.com/javase/7/docs/api/java/awt/image/VolatileImage.html) с помощью GraphicsConfiguration и нарисуйте его перед копированием. –