Minulla on sellainen harjoitustehtävä, että pitäisi tehdä adapteriluokalla toimiva tekstikenttä, johon ei voi kirjoittaa kuin numeroita. Hain netistä apua ja eräältä sivulta löytyi vinkki, että tuollaisella KeyEvent.consume()-metodilla voisi estää merkkien tulostumisen tekstikenttään.
Jostakin syystä se ei toimi, vaan kaikki kirjaimetkin tulostuvat siihen. Mitenköhän sen saisi toimimaan?
import javax.swing.*; import java.awt.event.*; public class AdapterTest extends JFrame { public AdapterTest() { JTextField arvausKentta = new JTextField(2); arvausKentta.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { char c = e.getKeyChar(); if (!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE))) { e.consume(); } } }); add(arvausKentta); arvausKentta.setFocusable(true); } public static void main(String[] args) { AdapterTest frame = new AdapterTest(); frame.setTitle("Arvauspeli"); frame.setSize(300, 125); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
boolean onkoskirjain = Character.isLetter(character)
Ja tuosta negatiivinen tarkistus. Sitten löytyi tälläistä täältä:" http://content.liferay.com/document/api/util-java/com/liferay/util/Validator.html#isChar(char) ":
public class Validator
extends java.lang.Object
isChar
public static boolean isChar(char c)
isChar
public static boolean isChar(java.lang.String s)
isDigit
public static boolean isDigit(char c)
isDigit
public static boolean isDigit(java.lang.String s)
Aihe on jo aika vanha, joten et voi enää vastata siihen.