【问题标题】:JApplet contain a frame, or JApplet alone?JApplet 包含一个框架,还是单独的 JApplet?
【发布时间】:2012-11-08 21:46:53
【问题描述】:

我有这个项目需要发布,但不知道哪种方式最好。谁能帮帮我。

我有一个 Gui 应用程序(Jframe)。在那里我有一个 Jpanel 包含一些动画(实现可运行)。所以在我的 main 方法中,我会先调用构造函数,所以一切都显示得很好,然后调用 Runner.start()。 (线程)

所以基本上 gui 弹出然后动画发生,具体来说,动画只是我的程序的标题。

现在我想把它放在网站上,以便我的学生可以使用。 我不想使用 java web start,我希望它充当小程序。

那么我应该把这个jframe 放到我的applet 中吗? 还是我应该将整个事情从 jframe 转换为 japplet?这个小程序需要实现Runnable吗?

让我烦恼的是 Japplet 没有 main 方法,那么我如何指定我的 Jpanel 何时可以执行它的动画呢?我希望动画在所有内容都加载到屏幕上之后发生,而不是之前。

我想把它作为 init() 方法的最后一条语句?如果我错了,请纠正我。

谢谢,

【问题讨论】:

  • 您似乎正在寻找有关小程序的教程。
  • 这可能会有所帮助:Lesson: Java Applets (Oracle)
  • A Runnable 用于动画...请确保在事件调度线程上执行所有 Swing 操作,而不仅仅是在一些随机的 Thread 上。通常,javax.swing.Timer 用于 Swing 动画
  • “我想把它作为 init() 方法的最后一个语句?如果我错了,请纠正我。” 是的,但如果使用小程序,你也可能想要在stop() 中暂停动画并在start() 中恢复它。 (但请使用 JWS,如我的回答中所述。)

标签: java swing user-interface awt japplet


【解决方案1】:

我有一个 Gui 应用程序(Jframe)。 ..我想把这个放在网站上,以便我的学生可以使用。

虽然可以将框架转换为小程序,但更好的选择是使用 Java Web Start 从链接启动框架。

【讨论】:

    【解决方案2】:

    你可以同时做:

    主界面

    import java.awt.BorderLayout;
    import javax.swing.*;
    public class MainGui extends JPanel {
        public MainGui() {
            this(null);
        } 
        public MainGui(MyJApplet applet) {
            this.applet = applet;
            if (!isApplet()) {
                frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            } else
                frame = null;
            setLayout(new BorderLayout());
            // setPreferredSize(new Dimension(640, 480));
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    MainGui.this.run();
                }
            });
        }
        String title() {
            return "Title";
        }
        public void addContent() {
            add(new JLabel("add content! top"));
        }
        void run() {
            if (isApplet()) addContent();
            else {
                frame.setTitle(title());
                frame.getContentPane().add(this, BorderLayout.CENTER);
                addContent();
                frame.pack();
                System.out.println(getSize());
                frame.setVisible(true);
            }
        }
        boolean isApplet() {
            return applet != null;
        }
        public static void main(String[] args) {
            new MainGui(null);
        }
        protected final JFrame frame;
        protected final MyJApplet applet;
        private static final long serialVersionUID = 1;
    }
    

    MyJApplet

    import java.awt.BorderLayout;
    import javax.swing.JApplet;
    public class MyJApplet extends JApplet {
        public void start() {
    
        }
        public void init() {
            getContentPane().setLayout(new BorderLayout());
            addContent();
        }
        public void addContent() {
            getContentPane().add(new MainGui(this), BorderLayout.CENTER);
        }
        public static void main(String[] args) {
            new MainGui(null);
        }
        private static final long serialVersionUID = 1;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-22
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 2012-11-02
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      相关资源
      最近更新 更多