Вот пример, который использует InputVerifier
. Это минимальный пример , поэтому вы можете скопировать код и запустить его. Обратите внимание, что класс InputVerifier
был изменен в JDK 9. Тем не менее приведенный ниже код должен работать с любой версией JDK.
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.text.JTextComponent;
public class InpVerif implements Runnable {
private JFrame frame;
@Override // java.lang.Runnable
public void run() {
createAndDisplayGui();
}
private void createAndDisplayGui() {
frame = new JFrame("Input Verifier");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(createMainPanel(), BorderLayout.CENTER);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
private JPanel createMainPanel() {
JPanel mainPanel = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets.bottom = 5;
gbc.insets.left = 5;
gbc.insets.right = 5;
gbc.insets.top = 5;
JLabel label = new JLabel("Enter Text");
mainPanel.add(label, gbc);
JTextField textField = new JTextField(10);
textField.setInputVerifier(new SpecialCharactersVerifier());
gbc.gridx = 1;
mainPanel.add(textField, gbc);
JLabel label2 = new JLabel("Disallowed Characters");
gbc.gridx = 0;
gbc.gridy = 1;
mainPanel.add(label2, gbc);
JTextField textField2 = new JTextField("@ # / \\");
gbc.gridx = 1;
mainPanel.add(textField2, gbc);
return mainPanel;
}
private class SpecialCharactersVerifier extends InputVerifier {
private String regex = "^.*[@#/\\\\].*$";
@Override
public boolean shouldYieldFocus(JComponent input) {
boolean verified = verify(input);
if (!verified) {
JOptionPane.showMessageDialog(frame,
"These characters not allowed: @ # / \\",
"ERROR: Illegal Character[s]",
JOptionPane.ERROR_MESSAGE);
}
return verified;
}
@Override
public boolean verify(JComponent input) {
boolean verified = true;
if (input instanceof JTextComponent) {
JTextComponent textComponent = (JTextComponent) input;
String text = textComponent.getText();
if (text != null) {
verified = !text.matches(regex);
}
}
return verified;
}
}
/**
* @param args
*/
public static void main(String[] args) {
EventQueue.invokeLater(new InpVerif());
}
}
Обратите внимание, что JavaFX является [предположительно] преемником Swing , поэтому, если вы рассматриваете новую разработку GUI в java, возможно, вам следует рассмотреть возможность использования JavaFX . Если вам необходимо использовать Swing , я настоятельно рекомендую Создание GUI с JFC / Swing .