Java 如何从NETBEANS中jButton生成的代码中删除actionlistener

Java 如何从NETBEANS中jButton生成的代码中删除actionlistener,java,netbeans,Java,Netbeans,我正在尝试使用netbeans制作TIC-TAC-TOE游戏,当我完成Jframe-netbeans为我的jButtons自动生成代码的设计时,我对JAVA真的很陌生。问题是netbeans为我生成的所有代码都是不可编辑的,我很难理解 这个按钮是X O的,你点击它,X O文本就会出现,我想在我尝试点击一次后,它就会被禁用 jButton.setEnabled(false); 但我的按钮变灰了,所以我不使用它,因为我想我的按钮有颜色,所以 我试过了 jButton.removeActionli

我正在尝试使用netbeans制作TIC-TAC-TOE游戏,当我完成Jframe-netbeans为我的jButtons自动生成代码的设计时,我对JAVA真的很陌生。问题是netbeans为我生成的所有代码都是不可编辑的,我很难理解

这个按钮是X O的,你点击它,X O文本就会出现,我想在我尝试点击一次后,它就会被禁用

jButton.setEnabled(false); 
但我的按钮变灰了,所以我不使用它,因为我想我的按钮有颜色,所以

我试过了

jButton.removeActionlistener(this);
相反,它不起作用了,我不知道该怎么办,因为我不理解他们为我生成的代码

这里是他们提供给我的代码,我无法编辑,因为按钮太多了,代码也太多了,所以我想在这里举个例子,看看netbeans给了我什么

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {


    jButton1 = new javax.swing.JButton();


    jButton1.setBackground(new java.awt.Color(204, 204, 204));
    jButton1.setFont(new java.awt.Font("Tahoma", 1, 96)); // NOI18N
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    //my code here
} 
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
}                                       
在方法中 它不允许我在第一次点击后点击按钮,也不允许我的按钮变灰,但什么都没有发生请帮助我

提前谢谢。

可以

jButton.removeActionlistener(this);
甚至编译

您可以从按钮中删除所有侦听器,如下所示:

    for (ActionListener listener : jButton1.getActionListeners())
    {
        jButton1.removeActionListener(listener);
    }
或者,您可以跟踪状态,而不是干扰侦听器,类似于以下伪代码:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    if (buttonAlreadyClicked)
        // do nothing or play a sound or tell the user somehow else that this button was already clicked
    else
        changeToXorO
        buttonAlreadyClicked = true
} 
netbeans自动为我的jButtons生成代码问题是netbeans为我生成的所有代码都是不可编辑的

代码受到保护是有原因的。您应该通过查看GUI设计器的属性来更改代码。例如,如果要删除事件的代码,应在组件属性页的“事件”选项卡中执行该操作:

如果在对话框中单击
Remove
,事件处理程序将从代码中完全删除。只需删除可编辑文本字段(其中显示方法名称)中的文本即可实现相同的效果

但它把我的钮扣弄成灰色了

这是由外观和感觉决定的。禁用组件的渲染方式与启用组件的渲染方式不同

我尝试了
jButton.removeActionlistener(这个)

这不起作用,因为NetBeans使用匿名内部类来注册ActionListener,正如您在
initComponents()
方法中看到的那样

如果要动态添加和删除ActionListener,需要告诉GUI设计器使用主类作为侦听器。这可以在工具下完成→ 选择权→ JAVA→ 图形用户界面生成器:

但是,一旦更改了它,就需要重新生成事件处理程序。您需要删除并重新添加它以应用新一代样式

我通常创建自己的方法来处理事件,并从(生成的)事件处理程序中调用它们:

如您所见,事件处理程序中的代码只是分派给另一个方法。这样做的好处是,即使通过GUI设计器删除事件处理程序,也不会丢失已经编写的代码


NetBeans的GUI设计器是一个功能极其强大的工具,但它并没有消除理解底层Swing框架和Java概念的需要。和所有强大的工具一样,它需要一些时间来理解它

您应该阅读上的GUI设计器教程

您可能需要从以下两个方面开始


我还没有看过它们(因为我更喜欢文本而不是视频),但如果频道中包含GUI设计器的教程,您可能还想查看它。

尝试在没有编辑器的情况下从头开始编写。您将学习Swing如何真正工作,而不是如何绕过生成器施加的限制。@NeplatnyUdaj:我同意您的建议,首先学习Swing的基本概念。但是,不需要在GUI编辑器中“解决”任何问题。它允许完全定制代码,而无需任何变通方法。你只需要知道在编辑器中可以在哪里完成。你给我的代码确实删除了动作监听器谢谢你现在我改变了监听器的生成方式现在它工作了,我也将学习GUI thx这么多
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    if (buttonAlreadyClicked)
        // do nothing or play a sound or tell the user somehow else that this button was already clicked
    else
        changeToXorO
        buttonAlreadyClicked = true
}