在一个Build中支持Swing Applet和Frame

时间:2014-04-24 15:22:15

标签: java swing applet

我正在开发一款我希望嵌入到网络浏览器中并可作为独立jar下载的游戏。我有一个JComponent的子类来处理游戏。我还有一个显示游戏实例的JAppletJFrame的子类。如果有某种方法,我可以在我的主要方法中执行以下操作:

if (isEmbedded) {
    new AppletViewer();
} else {
    new FrameViewer();
}

或者我是否需要导出两次,首先使用AppletViewer,然后使用FrameViewer进行导出?

1 个答案:

答案 0 :(得分:3)

您可以使用这样的结构:

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

public class AppletBasic extends JApplet
{
    /**
     * Create the GUI. For thread safety, this method should
     * be invoked from the event-dispatching thread.
     */
    private void createGUI()
    {
        JLabel appletLabel = new JLabel( "I'm a Swing Applet" );
        appletLabel.setHorizontalAlignment( JLabel.CENTER );
        appletLabel.setFont(new Font("Serif", Font.PLAIN, 36));
        add( appletLabel );
        setSize(400, 200);
    }

    @Override
    public void init()
    {
        try
        {
            SwingUtilities.invokeAndWait(new Runnable()
            {
                public void run()
                {
                    createGUI();
                }
            });
        }
        catch (Exception e)
        {
            System.err.println("createGUI didn't successfully complete: " + e);
        }
    }

    public static void main(String[] args)
    {
        JApplet applet = new AppletBasic();
        applet.init();

        JFrame frame = new JFrame("Applet in Frame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setJMenuBar( applet.getJMenuBar() );
        frame.setContentPane( applet.getContentPane() );
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );

        applet.start();
    }
}

如果将类作为applet加载,则applet按原样执行。

如果将类加载到JVM中,则调用main()方法并将applet组件添加到JFrame。