24. august 2005 - 15:22
Der er
5 kommentarer og 1 løsning
Tal felt i java
Hvad skal jeg bruge for at få et en-linies textfelt som kun kan indeholde hel-tal i java? jeg har prøvet med: TextField, men det er grimt, og her kan også være andet end tal JEditorPane som ligeledes kan indeholde andet end tal
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
24. august 2005 - 15:28
#1
hvad med JFormattedTextField ?
24. august 2005 - 18:22
#2
import java.text.ParseException; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.awt.*; import javax.swing.*; import javax.swing.text.DefaultFormatter; public class BasicUI { public static void main(String[] args) { JFrame frame = new JFrame(); IntegerFormatter formatter = new IntegerFormatter(); formatter.setAllowsInvalid(false); JFormattedTextField tft1 = new JFormattedTextField(formatter); frame.getContentPane().add(tft1, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } } class IntegerFormatter extends DefaultFormatter{ public Object stringToValue(String text) throws ParseException { Pattern pattern = Pattern.compile("\\d*"); if (pattern != null) { Matcher matcher = pattern.matcher(text); if (matcher.matches()) { return super.stringToValue(text); } throw new ParseException("Pattern did not match", 0); } return text; } }
24. august 2005 - 18:23
#3
Det nemmeste er at bruge et JTextField, hvor du sætter et nyt Document. Lav en klasse som extender PlainDocument og override insertString() og sæt dit JTextFields Document med setDocument(ny klasse()), på den måde forhindrer du andre tegn end tal, enten de tastes eller pastes i dit JTextField. Se eksempel: import java.awt.Toolkit; import javax.swing.SwingConstants; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; public class TalFelt extends javax.swing.JFrame { public TalFelt() { initComponents(); } private void initComponents() { textField = new javax.swing.JTextField(); getContentPane().setLayout(new java.awt.FlowLayout()); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); textField.setColumns(10); getContentPane().add(textField); textField.setDocument(new MyDocument()); textField.setHorizontalAlignment(SwingConstants.RIGHT); pack(); } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new TalFelt().setVisible(true); } }); } private javax.swing.JTextField textField; } class MyDocument extends PlainDocument{ public MyDocument(){ toolkit = Toolkit.getDefaultToolkit(); } public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { if (str == null || str.equals("")) return; char c[] = str.toCharArray(); for(int i = 0; i < c.length; i++){ if (!Character.isDigit(c[i])){ toolkit.beep(); return; } } super.insertString(offs, new String(c), a); } private Toolkit toolkit; }
24. august 2005 - 18:28
#4
Sludder og vrøvl er gratis :) -- "forhindrer du andre tegn end tal" mener: "sikrer du at kun tal kan tastes/pastes"
16. august 2006 - 09:37
#5
smid et svar for point
16. august 2006 - 10:17
#6
Nå - du ville ikke holde jubilæum på det spørgsmål :)
Kurser inden for grundlæggende programmering