为什么使用ActionListener会破坏我的Swing Applet?

时间:2013-11-09 22:04:48

标签: java swing applet

我有一个在Java Swing中工作的应用程序,但似乎无法转换为Applet。基本上Applet上有四个按钮,我希望其中一个按钮清除屏幕然后绘制一个新界面(当然,我要为其他按钮添加内容,但我被困在这里)。 / p>

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.JApplet; //import swing applet interface
import java.util.Hashtable;

public class TopMenu extends JApplet{ 

  private JPanel panel = new JPanel();

  public void init(){
            mainMenu(); 
  }

public void mainMenu() {

    // create buttons

    panel.setLayout(new GridLayout(2, 2));

    JButton collectButton = new JButton("Collect data");
    JButton uploadButton = new JButton("Upload");
    JButton downloadButton = new JButton("Download");
    JButton exploreButton = new JButton("Explore data");

    panel.add(collectButton);
    panel.add(uploadButton);
    panel.add(downloadButton);
    panel.add(exploreButton);

    collectButton.addActionListener(new ActionListener(  ) {
      public void actionPerformed(ActionEvent e) {
          int numberGFish = 400;
                //panel.removeAll();  
                        //panel.add(new JLabel("Just to test"), BorderLayout.CENTER);   
                        //panel.revalidate();   
                        //panel.repaint();   
            }
    });

    setContentPane(panel);

  }

}

所有代码完全正常,直到我添加ActionListener,然后整个事情变得空白。它编译好了,但是当我在我的服务器上测试时,即使是第一个菜单也没出现,它只是一个空白的面板。我已经尝试在ActionListener位中放入大量非常平庸的东西,以确保它们不是问题,但正如你所看到的那样,甚至只是在那里声明一个数字也行不通。

最初我实际上有一个Listener位调用另一个方法,然后做了其他所有事情,而且这也没有用,我废弃了,因为我想也许这就是问题。

我确信这是如此简单,但我现在已经陷入了很多时间,我真的只是想要测试的东西。感谢建议。

2 个答案:

答案 0 :(得分:2)

不知道是否会出现问题,但应在Event Dispatch Thread上创建所有GUI组件。

以下是关于如何制作小程序的Swing教程的推荐代码结构:

public void init() {
    //Execute a job on the event-dispatching thread:
    //creating this applet's GUI.
    try {
        javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                createGUI();
            }
        });
    } catch (Exception e) {
        System.err.println("createGUI didn't successfully complete");
    }
}

private void createGUI() {
    JLabel label = new JLabel(
                       "You are successfully running a Swing applet!");
    label.setHorizontalAlignment(JLabel.CENTER);
    label.setBorder(BorderFactory.createMatteBorder(1,1,1,1,Color.black));
    add(label, BorderLayout.CENTER);
}

答案 1 :(得分:0)

我知道这是一个愚蠢的问题,但我无法理解。我现在已经整理好了。

我完全愚蠢,没有将TopMenu $ 1.class文件复制到服务器。由于某种原因,它可以在没有此文件的情况下工作,但不会添加ActionListener位。所以我从未想过这可能是问题所在。

卫生署!谢谢大家。