2014-02-25 3 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 주소에 대한 올바른지 확실하지 않지만 정규식을 변경할 수있는 최종 정적 필드가 있습니다 않으면이 작동하지 않습니다.

이 경우필드가 필드가 비어있는 경우 필드가 정규식과 일치하면 포커스 변경이 허용되고 그렇지 않으면 오류 대화 상자가 표시됩니다.

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