public void keyPressed (KeyEvent ke) { if (!ke.isActionKey() && ke.getKeyCode()!=KeyEvent.VK_DELETE && ke.getKeyCode()!=KeyEvent.VK_BACK_SPACE) // Tjek om keyCode er et tal? if (ke.getKeyCode()<KeyEvent.VK_0 || ke.getKeyCode()>KeyEvent.VK_9) { // Hvis nej consume() ke.consume(); } } public void keyReleased(KeyEvent ke){} public void keyTyped(KeyEvent ke){} }
Jeg har prøvet at extende med JTextField istedet for, men det virkede ikke. Dvs. den kunne godt compile og køre programmet men man kunne taste det ind man ville :o(
Har lige test det... Det er 10 (på en bærbar comp) ved ikke om 13 så måske er Enter ved det nummeriske keyboard på et alm. tastetur.
Desværre hjalp det ikke, jeg har en JDialog hvor jeg har 2 textfields (af ovenstående slags), en JComboks og så en JBotton. Jeg har sat en Enter som default button, men det virker desværre ikke sammen med disse textfields... har du nogen ide om hvordan jeg kan løse problemet?
private void initJDialogAddOms() { JLabel lAddOmsBeloeb = new javax.swing.JLabel(); JLabel lAddKPFirma = new javax.swing.JLabel(); JLabel lAddOmsAar = new javax.swing.JLabel(); final JTextField jTFAddOmsAar = new NumberTextField(); final JTextField jTFAddOmsBeloeb = new NumberTextField(); JButton jBAddOms = new javax.swing.JButton(); JLabel lAddOmsOverskrift = new javax.swing.JLabel(); final JComboBox jCBoxAddOmsFirma = new javax.swing.JComboBox();
jCBoxAddOmsFirma.setToolTipText("Firmaet omsætningen er tilknyttet"); addOms.getContentPane().add(jCBoxAddOmsFirma); jCBoxAddOmsFirma.setBounds(60, 40, 130, 20);
for(int j=0;j<firmaListe.size();j++) //Tilføjer firmer til combobksen jCBoxAddOmsFirma.addItem(firmaListe.get(j));
jCBoxAddOmsFirma.setSelectedItem(firma);
jBAddOms.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Firma f = (Firma)jCBoxAddOmsFirma.getSelectedItem(); //henter firma objektet ned fra comboboksen boolean ikkeTom=true;
if(jTFAddOmsAar.getText().equals("") || jTFAddOmsBeloeb.getText().equals("") || f==null) { JOptionPane.showMessageDialog(null, "Du skal angive: firma, år og omsætningen", "Angivelse mangler", JOptionPane.INFORMATION_MESSAGE); jTFAddOmsAar.requestFocus(); ikkeTom=false; }
else if(m.findesOms(omsListe, jTFAddOmsAar.getText(), "", f.getNavn())) //Findes en omsætning til et år til det pågældendee firma i forvejen? { JOptionPane.showMessageDialog(null, f.getNavn() +" har omsætning for "+ jTFAddOmsAar.getText(), "Omsætning findes i forvejen", JOptionPane.INFORMATION_MESSAGE); jTFAddOmsAar.requestFocus(); ikkeTom=false; }
if(ikkeTom) { date = new Date(); Omsaetning temp = new Omsaetning(jTFAddOmsAar.getText(), f, jTFAddOmsBeloeb.getText(), df.format(date)); omsListe.add(temp); //Personen tilføjes til arraylisten kPListe omsListModel.removeAllElements(); //Jlist for personer nulstilles updateJListOms(); //Jlist for personer opdateres med de personer der er tilknyttet det markerede firma. jTFAddOmsAar.setText(""); jTFAddOmsBeloeb.setText(""); jTFAddOmsAar.requestFocus(); ikkeTom=true; addOms.setVisible(false); addOms.dispose(); } } }); }
Jeg kan prøve at ligge programmet op som i en non mangle version hvis det vil gære det nemmere? Vi skal vist have fundet ud af noget med nogle ekstra points her, vi er jo ved at være et godt stykke over, hvad spørgsmålet egentlig gik ud på...
Noget er koden af desværre lavet på et tidspunkt hvor det ikke var gået op for at man ved parameter overførsel af komplekse datatyper arbejder med adresser og ikke kopierer fx objektet :o( Så især rasmus.java er meget uoverskuelig :o(
Run, er den klasse hvori main ligger. Rasmus, er den klasse hvor mine JDialogs ligger i.
De textfelter jeg har brugt NumberTextField på er ved tilføjelse af budget og oms, samt redigering af budget og oms. Man kan højreklikke på jlistene....
Hvis det er for uoverskuelig skal du bare sige til. Det er bare en kammerat jeg er ved at lave programmet for, han kan nok leve med at man er nød til at trykke på knappen...
public void keyPressed (KeyEvent ke) { if (!ke.isActionKey() && ke.getKeyCode()!=KeyEvent.VK_DELETE && ke.getKeyCode()!=KeyEvent.VK_BACK_SPACE) // Tjek om keyCode er et tal? if (ke.getKeyCode()<KeyEvent.VK_0 || ke.getKeyCode()>KeyEvent.VK_9) { // Hvis nej consume() ke.consume(); } }
Forrygende Arne! Det havde jeg slet ikke skænket en tanke. Troede godt den måtte være der når det ikke virkede med JTextField. Men det måtte det ikke...
Ja specielt mine JDialog burde jo have lagt i filer for sig selv, så var der da omkring 1000 linier mindre kode i rasmus.java......
Hvor meget siger man "normalt" man må have i en klasse? Det er nok et lidt abstrakt spørgsmål...
public class HeleTalTextField extends JTextField { private Toolkit toolkit; private NumberFormat integerFormatter;
public HeleTalTextField(int value, int columns) { super(columns); toolkit = Toolkit.getDefaultToolkit(); integerFormatter = NumberFormat.getNumberInstance(Locale.US); integerFormatter.setParseIntegerOnly(true); setValue(value); }
public int getValue() { int retVal = 0; try { retVal = integerFormatter.parse(getText()).intValue(); } catch (ParseException e) { // This should never happen because insertString allows // only properly formatted data to get in the field. toolkit.beep(); } return retVal; }
public void setValue(int value) { setText(integerFormatter.format(value)); }
protected Document createDefaultModel() { return new HeleTal(); }
protected class HeleTal extends PlainDocument { public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { char[] source = str.toCharArray(); char[] result = new char[source.length]; int j = 0;
for (int i = 0; i < result.length; i++) { if (Character.isDigit(source[i])) result[j++] = source[i]; else { toolkit.beep(); } } super.insertString(offs, new String(result, 0, j), a); } } }
1. No method may be longer than 25 lines, except as noted below. The 25-line length does not include comments and blank lines.
2. No class may have more than 25 public methods plus 25 protected methods, i.e., no more than 50 methods total. If a class has fewer that 25 public methods, it may have up to 50 methods total, however it may never have more than 25 public methods. Typically classes should have far fewer than 50 methods total. 4. Note that combining the 25-line rule with the 50-method rule means that no .java file can be longer the 1250 lines of code, excluding comments. Typically, .java files should have far fewer than 1250 lines.
Me dhensyn til point så kan du lave et et spørgsmål med overskrift "Point til arne_v" i denne kategori med et link til dette spørgsmål i selve spørgsmålet.
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.