2014-02-25 26 views
0

我正在製作一個程序,我必須驗證第一列是否是IP地址。如何使用正則表達式驗證JTable的第一列?

到目前爲止,我只想出如何找到如何過濾一行。但是,在將數據寫入文件之前,必須對其進行檢查。

有人可以幫我嗎?

+1

* 「但我只能找到如何過濾行。」 *鏈接到這一點。一旦完成,您需要做的就是爲用戶提供一個控制來編輯該行的IP列。 –

回答

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); 
8

您可以使用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(); 
      } 
     }); 
    } 
}