0

プログラムを作成していますが、最初の列が IP アドレスであるかどうかを検証する必要があります。

これまでのところ、行をフィルター処理する方法を見つける方法しかわかりませんでした。しかし、データをファイルに書き込む前に確認する必要があるのは列です。

誰か助けてくれませんか?

4

2 に答える 2

8

を使用し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();
            }
        });
    }
}
于 2014-02-25T15:04:19.107 に答える
0

列データを取得し、正規表現を適用して有効な IP を確認するだけです。

    String regex = "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$";

    String ip = (String)table.getValueAt(row, column);

    boolean isValidIP = ip.matches(regex);
于 2014-02-25T13:18:13.250 に答える