Ich versuche, schwere und leichte Komponenten gemäß these Richtlinien zu mischen.Kann leichte und schwere Komponenten nicht in einem undekorierten JFrame mischen
Ich erwarte den folgenden Code, um das gesamte Fenster grün zu malen. Stattdessen macht es den Bildschirm rote Hälfte von:
import java.awt.Canvas;
import java.awt.Color;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
public class Testcase extends Canvas
{
private static final long serialVersionUID = 0L;
public static void main(String[] arg)
{
final boolean enableWorkaround = false;
EventQueue.invokeLater(new Runnable()
{
@Override
public void run()
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
JLayeredPane layers = new JLayeredPane();
frame.getContentPane().add(layers);
JPanel green = new JPanel();
green.setBackground(Color.GREEN);
green.setBounds(0, 0, 800, 600);
layers.add(green, Integer.valueOf(1));
Canvas red = new Canvas();
red.setBackground(Color.RED);
red.setBounds(0, 0, 400, 600);
layers.add(red, Integer.valueOf(0));
frame.setSize(800, 600);
if (!enableWorkaround)
frame.setUndecorated(true);
frame.setVisible(true);
}
});
}
}
Abgebildet auf:
java version "1.6.0_23"
Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode, sharing)
und
java version "1.7.0-ea"
Java(TM) SE Runtime Environment (build 1.7.0-ea-b124)
Java HotSpot(TM) Client VM (build 20.0-b05, mixed mode, sharing)
Ist mein Code irgendwelche Fehler enthält, oder ist dies ein legitimes JDK Bug?
Das interessiert mich. – user489041
Grundlegende Frage: Warum müssen Sie leichte und schwere Wägekomponenten mischen? Zuletzt habe ich gelesen, dass SUN gesagt hat, dass das keine gute Idee war (oder natürlich vor einer Weile). Was passiert, wenn Sie nur Swing ohne Mischen in AWT-Komponenten verwenden? – Merky
Wir können nicht einfach leicht gehen, weil Java 3D-Engines OpenGL-native Canvases unter der Haube verwenden. Wir können nicht nur Schwergewicht sein, weil der alte Teil unserer Anwendung auf Swing basiert und es wenig Anreiz gibt, ihn neu zu schreiben (wir brauchen kein 3D für diese Komponenten). – Gili