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

标签 java swing applet

我有一个在 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 位中放入大量非常平庸的东西,以确保它们不会出现问题,但正如您所看到的,即使只是在其中声明一个数字也是行不通的。

最初,我实际上对另一个方法进行了监听器位调用,然后该方法执行了其他所有操作,但这也不起作用,我放弃了它,因为我认为这可能就是问题所在。

我确信这很简单,但我现在已经投入了很多时间,而且我真的已经没有要测试的想法了。非常感谢您的建议。

最佳答案

不知道这是否会成为问题,但所有 GUI 组件都应该在事件调度线程上创建。

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

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);
}

关于java - 为什么使用 ActionListener 会破坏我的 Swing Applet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19883652/

相关文章:

java - 运行我的 Java 应用程序时需要帮助

java - Swingworker 产生重复输出/输出无序?

java - 如何使用自签名证书在签名的 jar 文件中设置发布者名称?

java - Spring不调用setter

java - 如何来回更改 Java Swing Nimbus 按钮文本前景色?

java - 使用 Camel Rest 时如何记录请求负载?

java - 单击鼠标交换按钮图标

java - JPanel 之间的间隙

java - 运行没有main方法的Java程序?

iOS 13 不显示俄罗斯卢布 (₽) unicode 符号