0
我有一個簡單的應用程序,限制用戶的行數。 計算成功執行的行數。我使用documentListener從用戶捕獲事件。如何禁用JTextArea中的類型字符,但啓用刪除字符(Backspace)
但是,當來自用戶的輸入超過指定的行數時,所以我想禁止用戶再次輸入。但是,用戶仍然可以刪除他們輸入的字符。
我試過使用setEditable(false),但這種方法導致JTextArea不能再次永久編輯。
這是我的代碼。
....
public Demo2() {
initComponents();
textArea.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
System.out.println("Current Line when method call : "+getLineCountAsSeen(textArea));
if (getLineCountAsSeen(textArea) > maxLine){
JOptionPane.showMessageDialog(null, "Max line : "+maxLine);
try {
textArea.getDocument().remove(textArea.getDocument().getLength()-2, 2);
} catch (BadLocationException ex) {
Logger.getLogger(Demo2.class.getName()).log(Level.SEVERE, null, ex.getMessage());
}
} else {
lblLineCount.setText(String.valueOf(currentLine));
}
}
@Override
public void removeUpdate(DocumentEvent e) {
System.out.println("Current Line when method call : "+getLineCountAsSeen(textArea));
if (getLineCountAsSeen(textArea) > maxLine){
JOptionPane.showMessageDialog(null, "Max line : "+maxLine);
try {
textArea.getDocument().remove(textArea.getDocument().getLength()-2, 2);
} catch (BadLocationException ex) {
Logger.getLogger(Demo2.class.getName()).log(Level.SEVERE, null, ex);
}
} else {
textArea.setEditable(true);
lblLineCount.setText(String.valueOf(getLineCountAsSeen(textArea)));
}
}
@Override
public void changedUpdate(DocumentEvent e) {
System.out.println("Current Line when method call : "+getLineCountAsSeen(textArea));
if (getLineCountAsSeen(textArea) > maxLine){
JOptionPane.showMessageDialog(null, "Max line : "+maxLine);
try {
textArea.getDocument().remove(textArea.getDocument().getLength()-2, 2);
} catch (BadLocationException ex) {
Logger.getLogger(Demo2.class.getName()).log(Level.SEVERE, null, ex);
}
} else {
textArea.setEditable(true);
lblLineCount.setText(String.valueOf(getLineCountAsSeen(textArea)));
}
}
});
}
public static int getLineCountAsSeen(JTextComponent txtComp) {
Font font = txtComp.getFont();
FontMetrics fontMetrics = txtComp.getFontMetrics(font);
int fontHeight = fontMetrics.getHeight();
int lineCount;
try {
int height = txtComp.modelToView(txtComp.getDocument().getEndPosition().getOffset() - 1).y;
lineCount = height/fontHeight + 1;
} catch (Exception e) {
lineCount = 0;
}
if (lineCount == 0) {
System.out.println("Not Set!");
return lineCount;
} else {
currentLine = lineCount;
System.out.println("currentLine : "+currentLine);
return currentLine;
}
}
....
爲了更好地幫助越早,張貼[SSCCE(http://sscce.org/)。 –
atleast post full code。 – Makky
無法理解這個問題,在某種意義上說,一旦達到限制,您不希望用戶刪除輸入的數據(這導致了結論,即'JTextArea'內部的內容將保持爲是),那麼將JTextArea設置爲禁用狀態有什麼問題,因爲即使啓用了,仍然用戶不能執行任何操作,用戶既不能刪除也不能添加它。那麼現在需求究竟是什麼? –