通过JApplet绘制JFrame的GlassPane

时间:2013-12-15 22:55:31

标签: java swing awt

我一直试图在JApplet的顶部绘制一个'覆盖'来进行调试,但是要找出来;它不想。

虽然!如果我将 JApplet 更改为 JPanel ,那么它的效果非常好。

我找不到任何逻辑推理,而不是JApplet本身扩展了作为AWT组件的Applet,而JPanel扩展了作为根摆动组件的JComponent。 (据我所知)

正在发生的动画图片:http://puu.sh/5NUV2/7aa1c26671.gif

以下是我正在使用的代码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class OverlayTest extends JFrame {

    public static final Color OVERLAY_COLOR = new Color( 200, 10, 10, 127 );

    public static void main( String[] args ) {
        new OverlayTest();
    }

    public JPanel overlay;
    public Component applet;

    public OverlayTest() {
        this.setTitle( "" );
        this.setDefaultCloseOperation( EXIT_ON_CLOSE );
        this.setLayout( new BorderLayout() );
        this.setResizable( false );

        this.applet = new JApplet() {
            {
                this.setBackground( Color.BLACK );
                this.setPreferredSize( new Dimension( 256, 256 ) );
            }

            @Override
            public void paint( Graphics g ) {
                g.setColor( this.getBackground() );
                g.fillRect( 0, 0, this.getWidth(), this.getHeight() );

                g.setColor( Color.ORANGE );
                g.drawRect( 16, 16, this.getWidth() - 32, this.getHeight() - 32 );

                System.out.println( "Painted applet" );
            }
        };

        this.overlay = new JPanel( null ) {
            {
                this.setOpaque( false );
                OverlayTest.this.setGlassPane( this );
                this.setVisible( true );
            }

            @Override
            public void paint( Graphics g ) {
                g.setColor( OVERLAY_COLOR );
                g.fillOval( 0, 0, this.getWidth(), this.getHeight() );

                System.out.println( "Painted overlay" );
            }
        };

        this.add( this.applet, BorderLayout.CENTER );

        this.pack();
        this.setVisible( true );
    }
}

1 个答案:

答案 0 :(得分:1)

可能出现问题的清单......

  1. JApplet概念与JFrame非常相似,它有JRootPane,其中包含内容和其他元素
  2. 可能与混合AWT和Swing组件的z顺序问题有关
  3. 打破油漆链也无济于事......
  4. 为什么不设置小程序,而不是尝试设置框架的玻璃窗格?