2013-04-10 32 views
5

Tôi đang làm việc trên một giải sudoku và tôi đang cố gắng để hạn chế lượng số người dùng có thể nhập vào một tế bào cũng như CHỈ việc có thể để nhập số, hiện nay nó cũng chấp nhận thư. Tại thời điểm nó hoạt động như thế này: Nếu người dùng nhập "11125455876", nó sẽ chỉ sử dụng số cuối cùng được nhập (trong trường hợp này là "6"). Tôi muốn giới hạn số lượng người dùng có thể nhập vào một ô duy nhất thành 1 và chỉ chấp nhận số 1-9. Tôi không thực sự chắc chắn làm thế nào tôi có thể làm điều đó. Vì vậy, có lẽ nó sẽ chỉ ghi đè lên số trước đó hoặc một cái gì đó và nếu tôi bấm một phím chữ là "a" không có gì nên xảy ra.số Hạn chế đầu vào JTextField

Đây là mã của tôi:

public PanelGUI(int size) { 

    super(size); 
    NumberFormat f = NumberFormat.getInstance(); 
    f.setMaximumIntegerDigits(1); 
    f.setMinimumIntegerDigits(0); 
    f.setGroupingUsed(false); 
    cells = new JTextField[size][size]; 
    panel.setLayout(new GridLayout(size, size)); 
    for (int i = 0; i < size; i++) { 
     for (int j = 0; j < size; j++) { 
      cells[i][j] = new JFormattedTextField(f); 
      cells[i][j].setEditable(true); 
      cells[i][j].setFont(boldFont); 
      cells[i][j].setBorder(BorderFactory.createMatteBorder(1, 1, 1, 
        1, Color.white)); 
      cells[i][j].setHorizontalAlignment(JTextField.CENTER); 
      panel.add(cells[i][j]); 
     } 
    } 
} 

Như bạn thấy Tôi hiện đang sử dụng number format.

+1

Sử dụng [ 'DocumentFilter'] (http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/text/DocumentFilter.html) để giới hạn đầu vào. –

+0

@Extreme Coders Bạn có thể viết câu trả lời về cách nó trông giống như trong trường hợp của tôi? Tôi không quá quen thuộc với điều đó. Những gì cần phải được thay đổi? – Rob

+0

http://stackoverflow.com/questions/3519151/how-to-limit-the-number-of-characters-in-jtextfield – herinkc

Trả lời

3
NumberFormat f = NumberFormat.getInstance(); 
f.setMaximumIntegerDigits(1); 
f.setMinimumIntegerDigits(0); 
f.setGroupingUsed(false); 

Bạn muốn sử dụng một instread MaskFormat:

MaskFormatter f = new MaskFormatter("#"); 
f.setValidCharacters("123456789"); 
+0

Tôi đã thử những gì bạn đề cập nhưng nó cho tôi một lỗi và nói với tôi hoặc là thêm một tuyên bố ném hoặc bao quanh với try/catch. Mặc dù vậy, không làm cho nó hoạt động được. – Rob

+1

Vì vậy, thêm một thử/bắt. Đây là chương trình Java chuẩn và không có gì đặc biệt để làm với mã này. Bạn cần biết cách xử lý các ngoại lệ. Bạn luôn có thể tìm kiếm diễn đàn/wed ví dụ sử dụng try/catch. – camickr

Các vấn đề liên quan