| Код | private JTextArea jta = new JTextArea();
...
public void keyPressed(KeyEvent e) { String text = jta.getText();
if(!Character.isDigit(e.getKeyChar())) { JOptionPane.showMessageDialog(null, "not digit"); jta.setText(text); } }
|
этот вариант подходит только для целых положительных чисел, поэтому я обычно использую такой:
| Код | import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class Main extends JFrame { private NumberTextField ntf = new NumberTextField(); public Main() { add(ntf); }
public static void main(String [] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { Main main = new Main(); main.setDefaultCloseOperation(3); main.setBounds(100, 100, 400, 300); main.setVisible(true);}}); } }
class NumberTextField extends JTextField implements KeyListener, FocusListener { private String s = "";
NumberTextField() { setHorizontalAlignment(JTextField.CENTER); addKeyListener(this); addFocusListener(this); setValue(0); }
public void setValue(double d) { setText(getNumber(d + "") + ""); }
public double getNumber() { return getNumber(getText()); }
private double getNumber(String text) { double d = 0;
try { d = Double.parseDouble(text); s = d + ""; } catch(NumberFormatException ex) { setText(s); } return d; }
public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_ESCAPE || e.getKeyCode() == KeyEvent.VK_DELETE) { s = ""; setText(s); } }
public void keyReleased(KeyEvent e) { if(getText().length() > 1) //число может быть отрицательным, //первый символ может быть минусом getNumber(getText()); } public void keyTyped(KeyEvent e){}
public void focusGained(FocusEvent e){} public void focusLost(FocusEvent e) { setText(getNumber() + ""); } }
|
|