2012-07-20 62 views
1

有沒有辦法強制在JTextField中的所有用戶輸入在Java中都是大寫?java force JTextField僅爲大寫

+7

是的,這是可能的。你有什麼嘗試? – Jeffrey 2012-07-20 01:52:20

+4

有沒有辦法強制人們發佈問題來正確地大寫Java和每句話的第一個單詞? – 2012-07-20 03:23:00

+4

有沒有辦法阻止人們張貼無用的評論? – 2012-07-20 05:59:41

回答

9

一個完整的工作示例可以幫助您

import java.awt.Dimension; 
import java.awt.FlowLayout; 

import javax.swing.JFrame; 
import javax.swing.JTextField; 
import javax.swing.text.AbstractDocument; 
import javax.swing.text.AttributeSet; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.DocumentFilter; 

public class UpperCasedTextFieldTester extends JFrame { 
    /** */ 
    private static final long serialVersionUID = -4767854098431909437L; 

    public UpperCasedTextFieldTester(){ 
     setSize(200, 200); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLayout(new FlowLayout(FlowLayout.LEFT)); 

     DocumentFilter filter = new UppercaseDocumentFilter(); 

     JTextField firstName = new JTextField(); 
     firstName.setPreferredSize(new Dimension(100, 20)); 
     ((AbstractDocument) firstName.getDocument()).setDocumentFilter(filter); 

     JTextField lastName = new JTextField(); 
     lastName.setPreferredSize(new Dimension(100, 20)); 
     ((AbstractDocument) lastName.getDocument()).setDocumentFilter(filter); 

     add(firstName); 
     add(lastName); 
    } 

    public static void main(String[] args) { 
     new UpperCasedTextFieldTester().setVisible(true); 
    } 

} 

class UppercaseDocumentFilter extends DocumentFilter { 
    public void insertString(DocumentFilter.FilterBypass fb, int offset, 
      String text, AttributeSet attr) throws BadLocationException { 

     fb.insertString(offset, text.toUpperCase(), attr); 
    } 

    public void replace(DocumentFilter.FilterBypass fb, int offset, int length, 
      String text, AttributeSet attrs) throws BadLocationException { 

     fb.replace(offset, length, text.toUpperCase(), attrs); 
    } 
} 
6

你有兩個直接的選擇。您可以提供自己的document,這是工作的點點,或提供自己的DocumentFilter

或者,你只是谷歌,看看你發現了什麼,像http://www.java2s.com/Code/Java/Swing-JFC/DocumentFilterthatmapslowercaseletterstouppercase.htm此例如;)

+0

根據他的需要,OP也可以使用'KeyListener'或'InputVerifier'。 – Jeffrey 2012-07-20 02:02:54

+0

@Jeffrey:不,KeyListener是一個低級解決方案,應該不鼓勵。它只是感覺不對,因爲它只能在用戶輸入的一個方面工作,當輸入可以來自任何數量的來源。 1+給MadProgrammer的回答。我認爲DocumentFilter是這裏的一種方式。 – 2012-07-20 02:05:13

+0

另外,在文本添加到字段失去焦點時才調用的字段後調用InputVerifier。它不適合這個目的,否則你只是使用焦點偵聽器 – MadProgrammer 2012-07-20 02:12:23

3

下面是一個例子DocumentFilter

AbstractDocument document = (AbstractDocument) textfield 
       .getDocument(); 
     document.setDocumentFilter(new DocumentFilter() { 
      @Override 
      public void insertString(FilterBypass fb, int offset, 
        String string, AttributeSet attr) 
        throws BadLocationException { 
       super.insertString(fb, offset, string.toUpperCase(), attr); 
      } 

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

     });