繁体   English   中英

Applet可以运行,但不会显示摆动组件!

[英]Applet works, but swing components won't appear!

因此,我正在创建这个applet,我想在其中包含所有的swing组件。 我查看了所有文档,制作了applet,如果覆盖了update(Graphics g)方法,可以在其中显示一些内容,但是仅向contentPane添加组件似乎并没有做到这一点! 我究竟做错了什么?

import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import org.steephill.kindlab.LabApp;

import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

public class ClientApplet extends JApplet {

    ClientTreePanel treePanel;

    public void destroy() {
        // Put your code here
    }

    public String getAppletInfo() {
        return "KindLab Client Applet";
    }

    public void init() {

        try {
            LabApp.initializeHibernate();
            if (!LabApp.authenticate("user", "pass")) {

                JOptionPane.showMessageDialog(this, "authentication failed");
            } else {

                try {
                    javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
                        public void run() {
                            createGUI();
                        }
                    });
                } catch (Exception e) {
                    System.err.println("createGUI didn't successfully complete");
                }

                    }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(this, "error intitializing applet\r\n" + ex.getMessage());
        }
    }

    protected void createGUI() {

        treePanel = new ClientTreePanel();
        treePanel.setVisible(true);
        getContentPane().add(new JLabel("TESTING!"));
        getContentPane().add(treePanel);

        System.out.println("THIS DOES RUN");
    }

    public void start() {
        // Put your code here
    }

    public void stop() {
        // Put your code here
    }

    /*  if I uncomment this method, it WORKS and I get "Hello World!"
    public void paint(Graphics g) {
        super.paint(g);
        g.drawString("Hello World!",25,25);
    }
     */
}

请帮忙! 谢谢你! 约书亚

我在这里看到您的代码的几个问题:

  1. 您不会在GUI设置结束时调用pack()
  2. 您可以在applet的内容窗格中添加几个组件,但是没有任何布局限制。 默认的内容窗格通常是BorderLayout,因此添加两个没有任何约束的组件可能只会将ClientTreePanel放在顶部。

由于不调用pack(),因此不会计算布局,这可能会导致不显示任何内容(您未提供ClientTreePanel的代码)。

尝试删除您的绘画方法,您会发现它可行。 问题可能是这样的事实,因为您有了绘画方法,所有更改都是通过它进行的。 不过这很奇怪,因为它确实显示了一个JButton。

你不应该叫包() -当组件首次成为实现布局将被计算,当你调用包恰好-而且当组件首次变得可见。

“无限制地添加组件”在正确的轨道上-您应将内容窗格中添加组件的代码更改为:

getContentPane().add(new JLabel("TESTING!"), BorderLayout.NORTH);
getContentPane().add(treePanel, BorderLayout.CENTER);

另一个问题是为什么ClientTreePanel组件没有显示-可能是大小调整,布局问题或其他问题-但是却没有看到该代码,这只是猜测。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM