【问题标题】:Applet button click not working小程序按钮单击不起作用
【发布时间】:2012-03-15 13:53:46
【问题描述】:

当我单击小程序上的按钮时,我没有得到任何响应。 我之前得到了输出 - 然后我评论这部分做了一些其他的事情。 现在当我再次回到它时,无论我做什么它都不起作用。

public class main extends Applet {

    TextArea display = new TextArea();
    TextField input = new TextField();
    Button send;
    Button connect;

    String message;
    Socket cli = null;
    Socket client = null;
    time updatetime;
    Start_server start_server=null;

    public void init() {

        send = new Button("send");
        connect = new Button("Start");

        Panel keys = new Panel();
        keys.setLayout(new GridLayout(1, 1));
        keys.add(connect);

        Panel south = new Panel();
        south.setLayout(new BorderLayout());
        south.add("West", keys);
        south.add("Center", input);
        south.add("East", send);

        Label title = new Label("Lamport", Label.CENTER);
        title.setFont(new Font("Helvetica", Font.BOLD, 14));

        setLayout(new BorderLayout());
        add("North", title);
        add("Center", display);
        add("South", south);

    }

    public boolean action(Event e, Object o) {
        if (e.target == connect) {
            display.append("connected");
        }
        else if(e.target == send) {
            display.append("sent");
        }
        return true;
    }
}

【问题讨论】:

  • 1) public class main .. a) 'main' 对于小程序类来说是一个糟糕的名字。 b) 请学习常见的Java naming conventions(特别是用于名称的大小写)用于类、方法和属性名称,并始终如一地使用它们。 2) .. extends Applet { 在这个千年不要使用 AWT 组件。使用摇摆。 3)不要使用过时的方法。检查 JavaDocs 以获取替换。 4) 为了尽快获得更好的帮助,请发帖SSCCE
  • 我写的所有代码都是为了一个目的......所以你有什么具体的答案吗?
  • “我写的所有代码都是为了一个目的......” 很好,很好......该评论应该解决我提出的 4 点中的任何一个吗?如果是这样,是哪一个,以及如何? “那么您有什么具体的答案吗?” 那么您是否注意到我们的 cmets 下方以“3 个答案”开头的区域?那么你注意到最上面的答案了吗?那么你注意到是谁在 23 小时前发布的吗?所以你现在开始觉得愚蠢了吗? ;)
  • 感谢您对我的代码的所有兴趣和这么多宝贵的建议......现在也许您甚至可以教我如何“使用 Swing”,这将是一个很好的帮助顾问!跨度>
  • “最后我重写了整个代码,它神奇地工作了” 这没有什么神奇之处。在您了解发生的情况并加以纠正之前,每次更改小程序代码时,此问题都会继续显现。 “现在也许你甚至可以教我如何“使用 Swing” 当然,here you go

标签: java button applet


【解决方案1】:

按钮不能神奇地做任何事情,除非你给他们代码让他们做事,这是通过向按钮添加一个 ActionListener 来完成的。我在任何地方都看不到您这样做,这当然是您问题的解决方案。在编写此代码之前,您是否阅读过有关这方面的教程,因为它在教程和本论坛以前的主题中都有很好的描述?另外,只是好奇为什么要编写 AWT 程序而不使用更强大的 Swing GUI 库?

【讨论】:

  • “按钮不能神奇地做任何事情” 如果你覆盖像public boolean action(Event e, Object o)这样的不推荐使用的方法,它们就是;)但是对于OP(以防万一你感到困惑关于此事) - 不要覆盖已弃用的方法。如果没有别的,它会让人们感到困惑!
  • @Andrew:哎呀——我没看到他这样做。谢谢安德鲁!
  • 我去寻找它,在问题文本中注意到代码之前已经工作过(WAG 这是一个类缓存问题)。
  • 我尝试添加 ActionListener 但在 ActionListener 的参数中我给出了一些参数,Eclipse 给出错误并建议将参数转换为 ActionListener 类型...仍然给出错误
【解决方案2】:

首先你的类需要实现 ActionListener 接口

public class main extends Applet implements ActionListener

这需要你创建你已经拥有的action(Event)函数。

然后你需要告诉你的按钮使用类作为他们的动作监听器

send.addActionListener(this);

这应该使点击注册。

【讨论】:

    【解决方案3】:

    在我添加导入后,注释掉几行多余的行,添加一个小程序标签,编译它并在小程序查看器中运行它,我得到类似的输出..

    connectedconnectedsentconnectedsent
    

    所以我认为你的问题是浏览器正在使用旧版本的类。在开发过程中,最好使用小程序查看器(或Appleteer)来启动小程序,这两个缓存类都不是。

    如果小程序需要这些工具不支持的测试内容(例如与 JS 交互),请确保您已将 Java 控制台配置为在加载小程序(或 JWS 应用程序)时打开。有一些命令(参见开始输出中的列表)来刷新缓存。有时也可以通过停止和重启浏览器来实现,但清除类缓存更可靠。

    【讨论】:

    • 很高兴我让他/她部分无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2018-05-02
    • 2016-06-07
    • 2014-03-24
    相关资源
    最近更新 更多