2014-02-25 39 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(); 
      } 
     }); 
    } 
}