den simple løsning, som nok også er den mest normale, er vel at en Integer.parseInt(inputText); og derefter lave sin fejlhåndtering i en try catch der fanger den NumberFormatException der vil blive kastet hvis den ikke er en int. Om du vil lave den før du sætter texten, eller med en getText() bagefter på dit textfield er op til dig.
hvis det er brugeren der taster noget ind i et dit JTextField, kan du adde en FocusListener på dit textField og derefter: public void focusLost(FocusEvent e) { try { Integer.parseInt(inputField.getText()); } catch(NumberFormatException nfe) { doSomeErrorHandling(); //eks. inputField.setText(0); // inputField.selectAll(); // inputField.requestFocus(); } }
Hehe så er der religionskrig... Hvorfor tænke så meget over hvor meget det fylder? Det gælder om at få en løsning som virker max. 1) hvis løsningen ikke skal kunne fungere ved tidligere versioner så brug danny_k's løsning. (jeg antager at det virker, da jeg ikke selv kender JFormattedTextField ) 2) Hvis løsningen skal være bagudkompatibel samt hvis det ikke skal være muligt at indtaste chars så skal min løsning bruges.
Jeg kan slet ikke se fordelen ved labanos' løsning???
fordel? Sorry men JFormattedTextField er syntaktisk sukker for min løsning, den gør sådan set det sammen, bare med et par yderligere muligheder for hvad der skal ske ved en fejl.
Ligesom du slet ikke kan se fordelen ved min løsning, kan jeg heller ikke rigtig se fordelen ved din ;)
Men jeg vil give dig ret, brug en løsning ud fra betragtningen om kompabilitet, og ikke vores personlige preferencer... men hvis du bruger en ny java.. så brug JFormattedTextField..
her er et eksempel med DocumentListener - med en DocumentListerner så får du en event når der bliver skrevet, slettet eller ændret i dit tekstfelt. Med en keyListener får du en event når der trykkes på en key, dvs du kan "snyde" af tekstfeltet ved at copy paste med musen. Om det er et problem afhænger af din situation
import javax.swing.*; import java.awt.*;
import javax.swing.event.*; public class MyFrame extends JFrame implements DocumentListener {
JTextField inputField;
public MyFrame() { super("Text test"); setSize(500,500);
//Gives notification that an attribute or set of attributes changed. public void changedUpdate(DocumentEvent e) { try { Integer.parseInt(inputField.getText()); } catch(NumberFormatException nfe) { JOptionPane.showMessageDialog(null, "alert", "alert", JOptionPane.ERROR_MESSAGE);
} }
//Gives notification that there was an insert into the document. public void insertUpdate(DocumentEvent e) { try { Integer.parseInt(inputField.getText()); } catch(NumberFormatException nfe) { JOptionPane.showMessageDialog(null, "alert", "alert", JOptionPane.ERROR_MESSAGE); } } //Gives notification that there was an remove from the document.
conrad -> aner det ikke, men mon ikke at den paster normalt? Den situation må man nok progge sig ud af
labanos -> fordelen ved min er at du slipper for try-catch og vi tillader slet ikke brugeren at indtaste andet end tal. Hvorfor tillade det hvis det kan undgås?
repsak: det er op til den enkelte udvikler.. det handler vel om hvordan man ønsker at behandle den bruger der indtaster noget... hvornår og hvordan han/hun skal have at vide at han gøre noget forkert... og om han skal have det at vide? :)
Personligt er jeg nok mest til JFormattedTextField, ser ud til at være en smooth løsning ;) (har bare ik set den før, da den ikke eksisterede da jeg startede med java). Synes nok at en docomentListener er lidt overkill til noget så simplet som input af en int... men ok.. det virker...
labanos -> klart, det er op til den enkelte, men jeg kan bare ikke se nogen grund til at tillade noget som kan forhindres (altså at brugeren indtaster karakterer istedet for tal). Så kan man altid diskutere hvordan Conrad's problem skal håndteres (copy/paste)
repsak: det kan du have ret i, det eneste umiddelbare argument er at det kan irritere en bruger, hvis han ikke ved hvad han gør galt. Anyways, det betyder jo nada, hvad der betyder noget er at fbisoft fik et par løsninger at vælge imellem ;)
Enig, for nu er vi vel nærmest ude i at tale brugervenlighed/grænseflade...;-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.