如何使用正则表达式validationJTable的第一列?
我正在制作一个程序,我必须validation第一列是否是IP地址。
到目前为止,我只想知道如何过滤行。 但是在将数据写入文件之前必须检查该列。
有人能帮助我吗?
您可以使用InputVerifier
来validation表格单元格的输入。 这样, 在所有输入都进入后,您不必validation所有内容,如果有许多不正确的输入,这可能会很麻烦。 使用InputVerifier
您将获得每个单元格输入的validation。
这是一个例子。 我不确定正则表达式是否对IP地址是正确的,但我有一个最终的静态字段,你可以改为正确的,如果这个没有。
使用这个特定的InputVerifier
,如果该字段与正则表达式匹配,如果该字段为空,则它将允许焦点更改,否则您将获得错误对话框。
text.matches(IP_REGEX) || text.isEmpty();
import javax.swing.DefaultCellEditor; import javax.swing.InputVerifier; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; public class TableVerifyInput { private static final String IP_REGEX = "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$"; public TableVerifyInput() { final InputVerifier verifier = getInputVerifier(); final DefaultCellEditor editor = getTableCellEditor(verifier); String[] cols = {"IP address", "Column 2"}; Object[][] data = {{null, null}, {null, null}}; DefaultTableModel model = new DefaultTableModel(data, cols); JTable table = new JTable(model) { public TableCellEditor getCellEditor(int row, int column) { int modelColumn = convertColumnIndexToModel(column); if (modelColumn == 0) { return editor; } else { return super.getCellEditor(row, column); } } }; JFrame frame = new JFrame("Table Cell Verify"); frame.add(new JScrollPane(table)); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); } private InputVerifier getInputVerifier() { InputVerifier verifier = new InputVerifier() { @Override public boolean verify(JComponent input) { JTextField field = (JTextField) input; String text = field.getText(); return text.matches(IP_REGEX) || text.isEmpty(); } @Override public boolean shouldYieldFocus(JComponent input) { boolean valid = verify(input); if (!valid) { JOptionPane.showMessageDialog(null, "Invalid IP address"); } return valid; } }; return verifier; } private DefaultCellEditor getTableCellEditor(final InputVerifier verifier) { DefaultCellEditor editor = new DefaultCellEditor(new JTextField()) { { getComponent().setInputVerifier(verifier); } @Override public boolean stopCellEditing() { if (!verifier.shouldYieldFocus(getComponent())) { return false; } return super.stopCellEditing(); } @Override public JTextField getComponent() { return (JTextField) super.getComponent(); } }; return editor; } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new TableVerifyInput(); } }); } }
只需检索列数据并在其上应用正则表达式以检查有效的IP:
String regex = "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$"; String ip = (String)table.getValueAt(row, column); boolean isValidIP = ip.matches(regex);