나는 프로그램을 만들고 있는데 첫 번째 열이 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 주소에 대한 올바른지 확실하지 않지만 정규식을 변경할 수있는 최종 정적 필드가 있습니다 않으면이 작동하지 않습니다.
이 경우필드가 필드가 비어있는 경우 필드가 정규식과 일치하면 포커스 변경이 허용되고 그렇지 않으면 오류 대화 상자가 표시됩니다.
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 열을 편집 할 수있는 권한을 제공하기 만하면됩니다. –