【发布时间】:2014-07-07 01:26:32
【问题描述】:
我正在尝试根据 these 指南混合重量级和轻量级组件。
我期待下面的代码将整个窗口涂成绿色。相反,它会将屏幕的一半渲染为红色:
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);
}
});
}
}
转载于:
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)
和
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)
我的代码是否包含任何错误或者这是一个合法的 JDK 错误?
【问题讨论】:
-
基本问题:为什么需要混合轻量和重量的组件?最后我读到的是 SUN 说这不是一个好主意(或者是不久前的课程)。如果只使用 swing 而不混合 AWT 组件会发生什么?
-
我们不能实现纯粹的轻量级,因为 Java 3D 引擎在底层都使用 OpenGL 原生画布。我们不能只做重量级的,因为我们的应用程序的遗留部分是基于 Swing 的,并且几乎没有动力去重写它(我们不需要这些组件的 3D)。
-
是的,我链接的文章比你的更新。