Как удалить Actionlistener из кода, сгенерированного jButton в NETBEANS - PullRequest
1 голос
/ 29 апреля 2019

Я пытаюсь сделать игру TIC TAC TOE, используя netbeans, и я действительно новичок в JAVA, когда я закончил проектирование Jframe netbeans автоматически генерировал коды для моих jButtons, проблема в том, что весь код, который 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);

в методе после первого щелчка я не нажму кнопку и не выделю кнопку серым цветом, но ничего не произошло, помогите мне

заранее спасибо.

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

автоматически сгенерированные netbeans коды для моих jButtons проблема в том, что весь код, сгенерированный для меня netbeans, не редактируется

Существует причина, по которой код защищен,Вы должны изменить этот код, пройдя через свойства дизайнера GUI.Например, если вы хотите удалить код для события, вы должны сделать это на вкладке «События» листа свойств компонента:

enter image description here

Еслиесли вы нажмете Remove в диалоговом окне, обработчик событий будет полностью удален из вашего кода.Вы можете добиться того же, просто удалив текст в редактируемом текстовом поле (там, где показано название метода).

, но он затеняет мою кнопку

Это зависит от внешнего вида.Отключенные компоненты отображаются иначе, чем включенные компоненты.

Я пытался jButton.removeActionlistener(this);

Это не работает, потому что NetBeans использует анонимный внутренний класс для регистрации ActionListener, как вы можете видетьв методе initComponents().

Если вы хотите динамически добавлять и удалять ActionListener, вы должны указать GUI Designer использовать основной класс в качестве прослушивателя.Это можно сделать в разделе Инструменты → Параметры → Java → GUI Builder:

enter image description here

Однако, как только вы изменили это, вам нужно заново сгенерировать ваше событиеобработчик.Вам нужно удалить и повторно добавить его, чтобы применить стиль нового поколения.

Обычно я создаю свои собственные методы, которые обрабатывают события, и просто вызываю их из (сгенерированного) обработчика событий:

enter image description here

Как видите, код в обработчике событий просто отправляется другому методу.Преимущество этого состоит в том, что даже если вы удалите обработчик событий через дизайнер GUI, вы не потеряете код, который вы уже написали.


Конструктор графического интерфейса пользователя NetBeans является чрезвычайно мощным инструментом, но он не устраняет необходимость понимания базовой структуры Swing и концепций Java.И, как и со всеми мощными инструментами, для его понимания требуются затраты времени

Вам следует пройти уроки по разработке графического интерфейса на домашней странице NetBeans .

Возможно, вы захотите начать со следующих двух.

Я не смотрел на них (потому что предпочитаю текст вместо видео), но вы также можете зайти на канал NetBeans на YouTube , если он содержитлюбые учебные пособия для дизайнера GUI.

0 голосов
/ 30 апреля 2019

Может ли

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
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...