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은 구성 요소에서 발생할 수있는 다소 모호한 동작에 대한 알림을 제공하는 데 사용됩니다. JTextField의 경우, 일반적으로 사용자가 마우스와 필드의 상호 작용을 모니터링 할 경우

, 당신은 MouseListener이 필요합니다 (일반적으로 Enter 키를 통해) 일부 "적용"조치를 트리거 것을 의미

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 객체를 만든 후에 비활성화하지 않으면 이미 활성화되어있다. 그래서 당신의 액션 리스너는 JTextField의 상태를 변경하는 것과 관련하여 아무 것도하지 않습니다.

+0

텍스트 필드는 결코 setEnabled (false)가 아니므로 아직 클릭 할 수없는 이유는 확실하지 않았습니다. 그래서 actionPerformed 메서드에 사례를 추가했습니다. 클릭하면 텍스트 필드를 사용할 수 있다고 생각했습니다. PromptHandler는 ActionListener를 구현합니다. 다른 인터페이스를 구현해야합니까? – Fam

+0

변수를 포함하여 JTextField 자체를 생성 한 전체 코드를 게시 할 수 있습니까? – MathanMV

관련 문제