0

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

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 位,然后该方法执行了其他所有操作,但这也不起作用,我放弃了它,因为我认为这可能是问题所在。

我敢肯定这很简单,但我现在已经投入了很多小时,而且我真的已经没有要测试的东西的想法了。并感谢您的建议。

4

2 回答 2

2

不知道这是否会出现问题,但所有 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);
}
于 2013-11-09T23:14:26.327 回答
0

我知道这是一个愚蠢的问题,但我就是想不通。我现在已经整理好了。

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

嗬!谢谢大家。

于 2013-11-10T20:57:56.067 回答