2016-06-29 2 views
0

쉼표를 마침표로 바꾸고 싶습니다.Can not Replace 문자 ','를 '.'

두 가지 방법을 시도했지만 어느 것도 작동하지 않습니다.

방법 1 :

if(evt.getKeyChar() == ','){ evt.setKeyChar('.');} 

방법 2 :

if(evt.getKeyChar() == KeyEvent.VK_COMMA){ evt.setKeyChar(KeyEvent.VK_PERIOD);} 

나는 나를 도와 뭔가를 찾기 위해 노력했지만 그런 스레드가 전혀 없다.

더 많은 코드가 필요하다면 추가 할 수 있지만 실제로 필요하지 않으면 추가하지 않을 것입니다.

private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {          
// TODO add your handling code here: 

char inte=evt.getKeyChar(); 

if (!(Character.isDigit(inte)|| inte == KeyEvent.VK_COMMA ||inte == KeyEvent.VK_PERIOD || inte==KeyEvent.VK_BACK_SPACE) || inte==KeyEvent.VK_DELETE){ 
if(evt.getKeyChar() == KeyEvent.VK_COMMA){ evt.setKeyChar(KeyEvent.VK_PERIOD);} 
    getToolkit().beep(); 
    evt.consume(); 
} 
}    

내가 게시 한 모든 내용이 포함되어 있으며, 여전히 새로운 내용의 java입니다. 그래서 나는 너희들을 바라 볼 것입니다.

프로그램이 숫자를 가져 오지만 '.'을 제외한 나머지는 넣지 않습니다. 와 ','하지만 내가 사용할 때, 대신 float 번호로. 왜 내가 그것을 replavce하고 싶은지 오류가있다 '.'

+2

당신이하려고하는 경우, EVT 객체 – CSK

+0

무엇 :

텍스트를 변경하려면

이 JTextField를 체결하고, 내가하는 DocumentFilter 경로를가는 것이 좋습니다 사용자가 입력 한 숫자를 바르게 입력하십시오. 결국 모든 것을 입력하고 마지막에 쉼표를 바꾸지 않으시겠습니까? 그것이 당신이하려고하는 것이 아니라면, 질문을 명확하게하십시오. – NoRelect

+0

getKeyChar()를 실행하는 객체 인스턴스가 setKeyChar()를 실행하는 인스턴스와 동일한 인스턴스입니까? –

답변

0

당신은 keyTyped 방법을 대체 할 수 있습니다 다음의 KeyEvent를 수정하는

tfield.addKeyListener(new KeyListeningTool()); 

코드는 KeyListener를 추가

귀하의 질문은 실제로 당신이 물어 XY Problem입니다

class KeyListeningTool extends KeyAdapter { 

    @Override 
    public void keyTyped(KeyEvent evt) { 
     if (evt.getKeyChar() == ',') { 
      evt.setKeyChar('.'); 
     } 
    } 
} 
+0

감사합니다. 나중에 다시 시도해 볼게요. 필요한 곳에서 작동하는지 알려 드리겠습니다. –

+0

@AlexPyrg : 복사하여 JTextField에 붙여 넣은 텍스트로 작업 코드를 테스트 한 다음 여전히 작동하는지 알려주십시오. DocumentFilter를 사용하여 동일하게 시도하십시오. –

+0

@hovercraftfullofeels e-leet –

3

"어떻게 수정합니까? 그의 코드 문제 "가 가장 좋은 해결책은 완전히 다른 접근법을 사용하는 것입니다.

JTextComponent에 KeyListener를 추가하면 절대로 위험한 부작용이 생길 수 있습니다. JTextField의 Document 나 DocumentFilter에 추가 된 DocumentListener를 사용하는 것이 훨씬 더 좋습니다. 문서가 변경된 후 리스너가 반응하고 문서가 변경되기 바로 전에 필터가 반응하므로 변경 사항이 발생하기 전에 변경 내용을 "필터링"할 수 있습니다.

((PlainDocument) myJTextField.getDocument()).setDocumentFilter(....) 

예를 들어,

import javax.swing.*; 
import javax.swing.text.AttributeSet; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.DocumentFilter; 
import javax.swing.text.PlainDocument; 

public class SwapCommaWithPeriod extends JPanel { 
    private JTextField field = new JTextField(40); 

    public SwapCommaWithPeriod() { 
     add(field); 

     ((PlainDocument) field.getDocument()).setDocumentFilter(new DocumentFilter() { 
      @Override 
      public void insertString(FilterBypass fb, int offset, String text, AttributeSet attr) 
        throws BadLocationException { 
       text = text.replace(",", "."); 
       super.insertString(fb, offset, text, attr); 
      } 

      @Override 
      public void replace(FilterBypass fb, int offset, int length, String text, 
        AttributeSet attrs) throws BadLocationException { 
       text = text.replace(",", "."); 
       super.replace(fb, offset, length, text, attrs); 
      } 
     }); 
    } 

    private static void createAndShowGui() { 
     SwapCommaWithPeriod mainPanel = new SwapCommaWithPeriod(); 

     JFrame frame = new JFrame("Swap Comma With Period"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(() -> createAndShowGui()); 
    } 
} 
+0

안녕하세요, 계속 진행하고이 코드가 작동하는지 알려 주시면 제 코드를 얻을 수 있습니다.이 모든 글을 쓰고 테스트 할 시간을 가져 주셔서 감사합니다! –