2010-01-26 3 views
1

키를 입력 한 후에이 문자를 포함하여 TextArea 값을 가져 오는 가장 좋은 방법은 무엇입니까?Java Swing : 방금 입력 한 문자를 포함하여 TextArea 값을 가져 오는 방법은 무엇입니까?

짝수 리스너에서 수행하는 경우 textarea.getText()은 결과적으로 새로운 char이없는 값을 반환합니다.

는 기본적으로 나는 두 가지 방법을 참조하십시오 invokeLater 같은 뭔가

  1. 연기 처리를(). 스레드가없는 솔루션을 선호합니다.

  2. 캐럿 위치에 따라 문자를 텍스트에 넣을 위치를 파악합니다.

다른 어떤 간단한 기능이 있습니까?

감사합니다.

편집 :이 내가 무엇을 가지고 :

JTextArea textarea = (JTextArea) evt.getComponent(); 
String texySource = textarea.getText(); 
char keyCode = evt.getKeyChar(); 
//if(Character.isLetterOrDigit(keyCode) || Character.isSpaceChar(keyCode) ) 
if(keyCode >= 0x20 || keyCode == 0x0A || keyCode == 0x0D ){ 
    // TODO: The carret doesn't have to be at the end... 
    //texySource += Character.toString(evt.getKeyChar()); 

    String ch = Character.toString(evt.getKeyChar()); 
    texySource = StringUtils.overlay(texySource, ch, 
    textarea.getSelectionStart(), 
    textarea.getSelectionStart() ); 
} 
+0

가능한 통찰력을 확인하려면 http://stackoverflow.com/questions/1252698/how-can-i-know-when-the-text-of-an-editable-jcombobox-has-been-changed를 확인하십시오. –

+1

달성하고자하는 목표는 무엇입니까? – objects

+1

char (사용자가 입력 한) 텍스트를 포함하고 싶습니다. –

답변

0

당신의 keyReleased (KeyEvent를 전자)의 사용자 정의 구현과 함께 모든 KeyListener를 등록 시도?

체크 여기 API : 예제와 함께 KeyListener

태양의 튜토리얼 : How to write a Key Listener

+0

사실 KeyListener를 사용하고 있습니다 ... 위 코드는 구현 된 것입니다. –

2

당신이 문서 청취자를 생각 해 봤나? 아마도 타이핑 이벤트로 무장 한 것일까?

class TheListener implements DocumentListener, KeyListener { 
    boolean armed; 

    void keyPressed(KeyEvent ignore) { } 
    void keyReleased(KeyEvent ignore) { } 
    void keyTyped(KeyEvent e) { 
    armed = true; 
    SwingUtilities.invokeLater(new Runnable() { public void run() { 
     armed = false; 
    } 
    } 

    void deleteUpdate(DocumentEvent e) { 
    changeUpdate(e); 
    } 
    void insertUpdate(DocumentEvent e) { 
    changeUpdate(e); 
    } 
    void changedUpdate(DocumentEvent e) { 
    if (armed) { 
     String s = ((JTextComponent)e.getSource()).getText(); 
     //.... whatever you want to do now 
    } 
    } 
} 

//... 
TheListener aListener = new TheListener(); 
textArea.addKeyListener(aListener); 
textArea.getDocument().addDocumentListener(aListener); 

이론은, 키 입력의에 문서 변경 청취자 팔을 해제 할 수있는 EDT 이벤트를 추가하는 것입니다. 문서가 변경되면 먼저 해제됩니다. 일단 무장되면 키 입력 이벤트로 인해 문서 변경이 일부 발생했다고 가정 할 수 있습니다. (경고, 나는이 코드를 컴파일하지 않았다, YMMV).

+0

이것은 두 가지 단점이 있습니다 - 1) 스레드를 도입하므로 동기화가 필요합니다. 2) 간단하지는 않습니다 .-)하지만 getDocument()는 좋은 지적입니다. . –

1

DocumentListener을 사용하고 코드를 xxxupdate() 메소드 중 하나에 사용해야합니다.

관련 문제