我正在製作一個程序,我必須驗證第一列是否是IP地址。如何使用正則表達式驗證JTable的第一列?
到目前爲止,我只想出如何找到如何過濾一行。但是,在將數據寫入文件之前,必須對其進行檢查。
有人可以幫我嗎?
我正在製作一個程序,我必須驗證第一列是否是IP地址。如何使用正則表達式驗證JTable的第一列?
到目前爲止,我只想出如何找到如何過濾一行。但是,在將數據寫入文件之前,必須對其進行檢查。
有人可以幫我嗎?
只需檢索列數據,並把它應用了正則表達式來檢查有效IP:
String regex = "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$";
String ip = (String)table.getValueAt(row, column);
boolean isValidIP = ip.matches(regex);
您可以使用InputVerifier
來驗證表格單元格的輸入。這樣,您不必驗證之後的所有輸入都在之後,如果有許多不正確的輸入,這可能會很麻煩。使用InputVerifier
您將獲得每個單元輸入的驗證。
這裏是一個例子。我不知道該正則表達式是否正確的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列。 –