我正在尝试使用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);
在方法中 它不允许我在第一次单击后单击按钮,并且按钮没有变灰,但是什么也没发生,请帮帮我
提前谢谢。
答案 0 :(得分:1)
netbeans为我的jButton自动生成的代码问题是netbeans为我生成的所有代码都是不可编辑的
保护代码是有原因的。您应该通过浏览GUI设计器的属性来更改该代码。例如。如果要删除事件的代码,则应在组件属性表的“事件”选项卡中执行以下操作:
如果在对话框中单击Remove
,则事件处理程序将从代码中完全删除。您可以通过简单地删除可编辑文本字段(显示方法名称的地方)中的文本来实现相同的目的。
但是它使我的按钮变灰了
这是由外观和感觉驱动的。禁用组件的呈现方式与启用组件的呈现方式不同。
我尝试了
jButton.removeActionlistener(this);
那是行不通的,因为NetBeans使用匿名内部类来注册ActionListener,如您在initComponents()
方法中看到的那样。
如果要动态添加和删除ActionListener,则需要告诉GUI设计器使用主类作为侦听器。可以在工具→选项→Java→GUI Builder下完成:
但是,一旦您进行了更改,就需要重新生成事件处理程序。您需要删除并重新添加它以应用新一代样式。
我通常创建自己的方法来处理事件,并仅从(生成的)事件处理程序中调用它们:
如您所见,事件处理程序中的代码只是分派给另一个方法。这样做的好处是,即使您通过GUI设计器删除了事件处理程序,也不会丢失已经编写的代码。
NetBeans的GUI设计器是一个非常强大的工具,但是它并没有消除理解底层Swing框架和Java概念的需要。与所有强大的工具一样,它需要一些时间来理解它。
您应该阅读NetBeans homepage上的GUI设计器教程。
您可能要从以下两个开始。
我没有看过它们(因为我更喜欢文本而不是视频),但是您可能还想查看NetBeans' YouTube频道,看看其中是否包含GUI设计器的任何教程。
答案 1 :(得分:0)
是
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
}