setEnabled (true), когда radioButton.isSelected()

как я уже говорил в других сообщениях, я новичок в Java, и у меня есть несколько глупых проблем, вот в чем дело:

У меня есть радиокнопка (radioStock) и текстовое поле (stockField). Я хочу, чтобы по умолчанию для stockField было задано значение setEnabled(false), с этим нет проблем, и всякий раз, когда проверяется RadioStock, устанавливайте для StockField значение true. Я написал этот код, но он не работает.

if (radioStock.isSelected()) {
    stockField.setEnabled(true);
}else{
    stockField.setEnabled(false);
}

person Agustín    schedule 26.07.2013    source источник


Ответы (2)


Это должно работать

    radioStock.addActionListener(new ActionListener() 
    {
    @Override
    public void actionPerformed(ActionEvent e) 
    {
         if(radioStock == e.getSource()) 
         {
            stockField.setEnabled(radioStock.isSelected());
         }
       }
    });
person Maciej Cygan    schedule 26.07.2013
comment
почему if (radioStock..., если это анонимный внутренний класс? Как источник может быть чем-то еще? - person Hovercraft Full Of Eels; 27.07.2013
comment
Почему это должно работать? На какие принципы следует обратить внимание ОП? Слепое бросание кода в ОП - вот почему у них возникают проблемы. Иногда нам нужно научить их ловить рыбу, а не просто навязывать им рыбу ;) - person MadProgrammer; 27.07.2013

Этот код должен находиться в прослушивателе, который подключен к JRadioButton, например, в ActionListener или ItemListener. И вам даже не нужны блоки if, поскольку все, что вам нужно, это одна строка кода внутри слушателя:

  radioStock.addItemListener(new ItemListener() {

     @Override
     public void itemStateChanged(ItemEvent itemEvent) {
        stockField.setEnabled(itemEvent.getStateChange() == ItemEvent.SELECTED);
     }
  });

Дополнительные сведения об использовании JRadioButtons см. в руководстве: руководство по кнопкам.


Изменить мой SSCCE

import java.awt.event.*;
import javax.swing.*;

public class ItemListenereg {
   private static void createAndShowGui() {
      final JRadioButton radioStock = new JRadioButton("Stock", true);
      final JTextField stockField = new JTextField(10);
      JPanel panel = new JPanel();
      panel.add(radioStock);
      panel.add(stockField);

      radioStock.addItemListener(new ItemListener() {

         @Override
         public void itemStateChanged(ItemEvent itemEvent) {
            stockField.setEnabled(itemEvent.getStateChange() == ItemEvent.SELECTED);
         }
      });

      JOptionPane.showMessageDialog(null, panel);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
person Hovercraft Full Of Eels    schedule 26.07.2013
comment
Я вставил это, но все еще не работает! Нужно ли мне что-то еще менять? - person Agustín; 27.07.2013
comment
@Agustín: никогда не копируйте и не вставляйте код вслепую. Используйте содержащиеся в нем идеи, чтобы дополнить свою собственную программу. Прочитайте учебник, на который я предоставил ссылку. Думай, потом кодируй. Затем, если вы все еще застряли, создайте и опубликуйте минимальную программу, которая показывает только JRadioButton и JTextField и ничего больше, и показывает вашу проблему, sscce. Я опубликую пример sscce выше, чтобы показать вам, что я имею в виду. - person Hovercraft Full Of Eels; 27.07.2013