2016-06-29 16 views
0

Ich möchte Komma durch Punkt ersetzen.Kann das Zeichen ',' nicht durch 'ersetzen'

Ich habe 2 Methoden ausprobiert, aber keiner von ihnen funktioniert.

Methode 1:

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

Methode 2:

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

Ich habe versucht, etwas zu finden, mir zu helfen, aber es gibt überhaupt keine solche Themen.

Wenn Sie mehr Code benötigen, kann ich es hinzufügen, aber ich weiß nicht wirklich, ob Sie es brauchen, also habe ich es nicht hinzugefügt.

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(); 
} 
}    

Das ist die ganze Sache, dass diese Zeilen i geschrieben sind in, im noch neu bei java.So ich werde euch lassen deside.

Obwohl das Programm die Zahlen bekommt und nichts anderes als '.' und ',' aber wenn ich benutze, in einer Gleitzahl anstelle von. es gibt Fehler, deshalb möchte ich es mit 'ersetzen.'

+2

was das – CSK

+0

evt Objekt Wenn Sie versuchen, korrekte Zahleneingaben durch Benutzer, warum lässt man sie nicht alles eingeben und ersetzt am Ende das Komma? Wenn dies nicht das ist, was Sie versuchen, machen Sie bitte Ihre Frage klarer. – NoRelect

+0

Sind Sie sicher, dass die Objektinstanz, in der Sie getKeyChar() ausführen, dieselbe Instanz ist, in der Sie setKeyChar() ausführen? –

Antwort

0

können Sie überschreiben die keyTyped Methode:

die KeyListener Hinzufügen

tfield.addKeyListener(new KeyListeningTool()); 

-Code, um die KeyEvent zu ändern

class KeyListeningTool extends KeyAdapter { 

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

Danke, ich werde es später versuchen und ich werde Sie informieren, wenn es funktioniert, wo ich es brauche. –

+0

@AlexPyrg: Testen Sie seinen Arbeitscode mit Text, den Sie kopieren und in Ihr JTextField einfügen, und sagen Sie mir dann, ob es noch funktioniert. Probieren Sie dasselbe aus und verwenden Sie dann einen DocumentFilter. –

+0

@hovercraftfullofeels e-leet –

3

Ihre Frage ist eigentlich ein XY Problem wo Sie fragen "Wie repariere ich t sein Code-Problem ", wenn die beste Lösung darin besteht, einen völlig anderen Ansatz zu verwenden.

Fügen Sie niemals einen KeyListener zu einer JTextComponent hinzu, da dies zu gefährlichen Nebenwirkungen führen kann. Viel besser ist es, einen DocumentListener zu verwenden, der dem JTextField-Dokument oder einem DocumentFilter hinzugefügt wird. Der Listener reagiert, nachdem sich das Dokument geändert hat, und der Filter reagiert unmittelbar vor der Änderung des Dokuments, sodass Sie die Änderungen "filtern" können, bevor sie auftreten.

Wenn Sie den Text zu ändern, in die JTextField eingegeben werden, empfehlen werde ich die DocumentFilter Route:

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

zB

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

Hallo, ich werde weitermachen und dir sagen, ob das für mich funktioniert, wenn ich in meinen Code einsteigen kann. Danke, dass du dir die Zeit genommen hast, diesen ganzen Mann zu schreiben und zu testen! –