2013-03-07 65 views
0

我正在創建一個JOptionpane,用戶可以輸入hes名稱。因此,它不能爲空,也不能是數字輸入只能是字符串

空的部分工作,但現在我必須找到數字部分

的解決方案正如你可以在我的代碼中看到我做了一個while循環來檢查「naam」是否爲空。現在我需要找到一種方法來檢查「naam」是不是一個數字。

String naam = JOptionPane.showInputDialog("Geef uw naam in: "); 

while (naam.equals("")) { 
    JOptionPane.showMessageDialog(null, "Geef een naam in", "Geef naam", JOptionPane.ERROR_MESSAGE); 
    naam = JOptionPane.showInputDialog("Geef uw naam in: "); 
+0

我會創建一個自定義的'JDialog'並在'JTextField'上應用'DoumentListener',其中'JButton'被禁用,直到'JTextField'有一個有效的輸入。 – 2013-03-07 23:48:18

回答

1

您可以使用正則表達式來檢查它是否包含任何數字。 java中的正則表達式「\\ D」代表非數字,「+」代表1或更多。所以,你可以改變你的while循環:

while (!naam.matches("\\D+")) 

這將包括空等於檢查,因爲你需要至少有一個非數字爲它匹配。

1

使用regular expressions

if (naam.matches("\\d+")) {/*it is a number*/} 

String.matches(regexp)返回true如果字符串給定的參數的正則表達式匹配。在這個例子中,\\d+匹配一個或多個數字。

您可以嘗試使用其他模式以禁止使用無效字符的字符串(例如「My#name」),但這取決於您對「名稱字符」的定義。

例如,[A-Z][a-z]*(?:\\s[A-Z][a-z]*)會匹配具有一個或多個大寫字母序列後跟零個或多個小寫字符的字符串,每個序列由一個空格分隔,如My Name Is X

3

你可以簡單地在對話框中直接篩選,而不是搞亂不必顯示錯誤對話框,並重新顯示在對​​話框輸入,...

import java.awt.EventQueue; 
import javax.swing.JOptionPane; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import javax.swing.text.AbstractDocument; 
import javax.swing.text.AttributeSet; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.DocumentFilter; 

public class TestOptionPane08 { 

    public static void main(String[] args) { 
     new TestOptionPane08(); 
    } 

    public TestOptionPane08() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JTextField name = new JTextField(10); 
       ((AbstractDocument) name.getDocument()).setDocumentFilter(new DocumentFilter() { 
        public String filter(String text) { 
         StringBuilder sb = new StringBuilder(text.length()); 
         for (char c : text.toCharArray()) { 
          if (!Character.isDigit(c)) { 
           sb.append(c); 
          } 
         } 
         return sb.toString(); 
        } 

        @Override 
        public void insertString(DocumentFilter.FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { 
         super.insertString(fb, offset, filter(string), attr); 
        } 

        @Override 
        public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException { 
         String filter = filter(text); 
         super.replace(fb, offset, length, filter, attrs); 
        } 
       }); 

       JOptionPane.showMessageDialog(null, name, "Name Please", JOptionPane.QUESTION_MESSAGE); 

      } 
     }); 
    } 
} 

現在,您可以添加到JTextFieldJPanel添加一個JLabel以及甚至錯誤消息...

+1

+1很好的答案。 – 2013-03-07 23:53:54

+0

我不喜歡亂搞; – MadProgrammer 2013-03-07 23:54:55

+0

+1我只是害怕初學者會很難理解它。 – ddmps 2013-03-08 00:00:36