gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:33:27 25 4
gpt4 key购买 nike

我有一个在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com