2013-02-14 2 views
0

Я не уверен, почему мой JTextField не включен, когда он нажат.Невозможно включить JTextField при нажатии кнопки

Вот код, где я создаю и установить JTextField:

PromptHandler ph = new PromptHandler(this); 
textPanel = new JPanel(); 
arEntry = new JTextField(REGION_TEXT_FIELD_COLUMNS); 
arEntry.setToolTipText(ENTER_NEW_REGION_ID_TITLE_TEXT); 
arEntry.setActionCommand(ENTER_NEW_REGION_ID_TITLE_TEXT); 
arEntry.addActionListener(ph); 
textPanel.add(arEntry); 

А вот код в PromptHandler, который берет на себя текстовое поле:

private HelloWorld hwApp; 
private String id; 

public PromptHandler (HelloWorld hw) { 
    hwApp = hw; 
} 

@Override 
public void actionPerformed(ActionEvent ae) { 
    String command = ae.getActionCommand(); 
    switch(command) { 
     case ENTER_NEW_REGION_ID_TITLE_TEXT: 
      hwApp.arEntry.setEnabled(true); 
      break; 
+2

Если вы ранее вызывали 'arEntry.setEnabled (false)', как можно вызвать 'actionPerformed()'? – trashgod

+0

Как вы отслеживаете поле событий мыши? – MadProgrammer

ответ

1

ActionListener не имеет ничего общего с взаимодействием с мышью. ActionListener s используются для уведомления о некотором невзрачном действии, которое может произойти с компонентом. В случае JTextField, это обычно означает, что пользователь вызвал некоторые «применить» действие (как правило, через Enter ключ)

Если вы хотите, чтобы контролировать взаимодействие полей с помощью мыши, то вам необходимо MouseListener

public class TestField { 

    public static void main(String[] args) { 
     new TestField(); 
    } 

    public TestField() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception ex) { 
       } 

       JFrame frame = new JFrame("Test"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setLayout(new GridBagLayout()); 
      JTextField field = new JTextField(20); 
      field.setEnabled(false); 
      add(field); 
      field.addMouseListener(new MouseAdapter() { 
       @Override 
       public void mouseClicked(MouseEvent e) { 
        e.getComponent().setEnabled(!e.getComponent().isEnabled()); 
       } 
      }); 
     } 
    } 
} 

Мое беспокойство в этом, почему? Если вы хотите включить поле в клик, что в этом причина его отключения? Единственное, что нужно сделать, это не допустить его до тех пор, пока он не будет включен.

+0

Дело в том, что текстовое поле не включено. Ключевые события также не работают. – Fam

+0

На самом деле, запустите пример, он отлично работает для меня. – MadProgrammer

1

Вы хотите отключить или включить ваш JTextField?

Я уверен, что когда вы создаете объект JTextField, он уже включен, если вы не отключите его после его создания. Поэтому ваш слушатель действия ничего не делает с точки зрения изменения состояния JTextField.

+0

Текстовое поле никогда не установленоEnabled (false), поэтому я не был уверен, почему он еще не был доступен для клика. Вот почему я добавил случай в методе actionPerformed, как я понял, нажав текстовое поле, можно включить. PromptHandler реализует ActionListener, мне нужно реализовать другой интерфейс? – Fam

+0

Не могли бы вы разместить весь код, в котором вы создали сам JTextField, включая переменные? – MathanMV

Смежные вопросы