在我的java窗體中有
jtextfield
。我不想輸入alpha(字符),只允許鍵入數字。java中的jtextfield上只有數字和小數點允許,不能輸入小數點後2位小數點和兩個數字。(即
jtextfield
價格..)
請告訴我如何做到這一步一步來。
在我的java窗體中有jtextfield
。我不想輸入alpha(字符),只允許鍵入數字。java中的jtextfield上只有數字和小數點允許
,不能輸入小數點後2位小數點和兩個數字。(即jtextfield
價格..)
請告訴我如何做到這一步一步來。
,如果你想只數試試這個代碼在你被inputed textfield
txtfield.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (!((c >= 0) && (c <= 9) || (c == KeyEvent.VK_BACK_SPACE) || (c == KeyEvent.VK_DELETE))) {
getToolkit().beep();
e.consume();
}
}
});
粘貼上面的代碼在構造函數後txtfield
初始化
也看看這個東西JFormattedTextField for Double still takes characters
糟糕的做法。如何粘貼錯誤的內容? – StanislavL
我可以用'Character.isDigit(c)'來代替'(c> = 0)&&(c <= 9)'嗎? – dic19
-1這種方法存在許多問題。小數點或負號是什麼(但不是兩者的倍數,它們必須在合理的地方)? – splungebob
使用帶有NumberFormat的JFormattedTextField
(請參閱for example)。另外,您可以自己DocumentFilter
添加的文件你JTextField
請告訴我如何做到這一步一步來。
使用的JFormattedTextField用的NumberFormatter
限制小數
設置各種RoundingModes
限制範圍內,設定最小和/或最大值
另一種方式是使用JSpinner的與SpinnerNumberModel的,但使用的DocumentFilter
例如
import java.awt.*;
import java.awt.font.TextAttribute;
import java.math.*;
import java.text.*;
import java.util.Map;
import javax.swing.*;
import javax.swing.JFormattedTextField.*;
import javax.swing.event.*;
import javax.swing.text.InternationalFormatter;
public class DocumentListenerAdapter {
public DocumentListenerAdapter() {
JFrame frame = new JFrame("AbstractTextField Test");
final JFormattedTextField textField1 = new JFormattedTextField(new Float(10.01));
textField1.setFormatterFactory(new AbstractFormatterFactory() {
@Override
public AbstractFormatter getFormatter(JFormattedTextField tf) {
NumberFormat format = DecimalFormat.getInstance();
format.setMinimumFractionDigits(2);
format.setMaximumFractionDigits(2);
format.setRoundingMode(RoundingMode.HALF_UP);
InternationalFormatter formatter = new InternationalFormatter(format);
formatter.setAllowsInvalid(false);
//formatter.setMinimum(0.0);
//formatter.setMaximum(1000.00);
return formatter;
}
});
final Map attributes = (new Font("Serif", Font.BOLD, 16)).getAttributes();
attributes.put(TextAttribute.STRIKETHROUGH, TextAttribute.STRIKETHROUGH_ON);
final JFormattedTextField textField2 = new JFormattedTextField(new Float(10.01));
textField2.setFormatterFactory(new AbstractFormatterFactory() {
@Override
public AbstractFormatter getFormatter(JFormattedTextField tf) {
NumberFormat format = DecimalFormat.getInstance();
format.setMinimumFractionDigits(2);
format.setMaximumFractionDigits(2);
format.setRoundingMode(RoundingMode.HALF_UP);
InternationalFormatter formatter = new InternationalFormatter(format);
formatter.setAllowsInvalid(false);
//formatter.setMinimum(0.0);
//formatter.setMaximum(1000.00);
return formatter;
}
});
textField2.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void changedUpdate(DocumentEvent documentEvent) {
printIt(documentEvent);
}
@Override
public void insertUpdate(DocumentEvent documentEvent) {
printIt(documentEvent);
}
@Override
public void removeUpdate(DocumentEvent documentEvent) {
printIt(documentEvent);
}
private void printIt(DocumentEvent documentEvent) {
DocumentEvent.EventType type = documentEvent.getType();
double t1a1 = (((Number) textField2.getValue()).doubleValue());
if (t1a1 > 1000) {
Runnable doRun = new Runnable() {
@Override
public void run() {
textField2.setFont(new Font(attributes));
textField2.setForeground(Color.red);
}
};
SwingUtilities.invokeLater(doRun);
} else {
Runnable doRun = new Runnable() {
@Override
public void run() {
textField2.setFont(new Font("Serif", Font.BOLD, 16));
textField2.setForeground(Color.black);
}
};
SwingUtilities.invokeLater(doRun);
}
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(textField1, BorderLayout.NORTH);
frame.add(textField2, BorderLayout.SOUTH);
frame.setVisible(true);
frame.pack();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
DocumentListenerAdapter main = new DocumentListenerAdapter();
}
});
}
}
你有什麼已經嘗試過要求? – Tala