gpt4 book ai didi

java - 如何使用正则表达式验证 JTable 的第一列?

转载 作者:行者123 更新时间:2023-12-01 07:06:53 24 4
gpt4 key购买 nike

我正在编写一个程序,我必须验证第一列是否是 IP 地址。

到目前为止,我只弄清楚如何找到如何过滤行。但在将数据写入文件之前必须检查该列。

有人可以帮助我吗?

最佳答案

您可以使用InputVerifier验证表格单元格的输入。这样,您就不必在所有输入都输入后验证所有内容,如果有许多不正确的输入,这可能会很麻烦。使用InputVerifier,您将获得每个单元格输入的验证。

这是一个例子。我不确定该正则表达式对于 IP 地址是否正确,但我有一个最终的静态字段,您可以将其更改为一个正则表达式,如果该字段不起作用,则该正则表达式可以工作。

使用这个特定的InputVerifier,如果该字段与正则表达式匹配或该字段为空,则它将允许焦点更改,否则您将收到一个错误对话框。

text.matches(IP_REGEX) || text.isEmpty();

enter image description here

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();
}
});
}
}

关于java - 如何使用正则表达式验证 JTable 的第一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22015273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com