2010-04-06 11 views
1

Salut I un problème avec les éditeurs dans un JTable.Java Swing éditeur de cellules jtable double numéros E

J'ai une colonne qui affiche des données comme 26,687,489,800.00 soit: Double.

Lorsque l'utilisateur clique sur la cellule pour éditer les données, celle-ci s'affiche sous la forme -2.66874908E10.

Je veux que les données soient modifiées tel qu'il apparaît lorsqu'il est affiché à savoir: 26,687,489,800.00 - sans le E10, etc ...

Toute aide serait appréciée.

Mike

Répondre

2

Vous devriez employer une instance DecimalFormat pour formater votre valeur correctement lorsque vous configurez votre éditeur.

+0

Salut, j'ai créé un champ de texte et ont formaté à l'aide: DecimalFormat df = new DecimalFormat ("#, ###, ###, ###, ###, ###, ## 0. ###### "); df.format (d); J'ai assigné le JTextField comme éditeur pour ma colonne MAIS j'ai toujours le même problème? Des idées? Ai-je manqué quelque chose Mike – Michael

2

Le composant utilisé comme éditeur est complètement différent de celui utilisé pour afficher les données (le moteur de rendu). C'est pourquoi vous avez une différence de format entre les deux.

Je vous recommande de lire ceci part of the Java tutorial, sur l'ajout de votre propre éditeur de cellule. Vous devez ajouter un Formatted text field, auquel vous souhaitez put the number format you need.

Exemple:

DecimalFormat df = new DecimalFormat ("#,##0.######"); //you shouldn't need more "#" to the left 
JFormattedTextField fmtTxtField = new JFormattedTextField(df); 
TableCellEditor cellEditor = new DefaultCellEditor(fmtTxtField); 

//This depends on how you manage your cell editors. This is for the whole table, not column specific 
table.setCellEditor(cellEditor); 
+0

Salut J'ai créé un champ de texte et l'ai formaté en utilisant: DecimalFormat df = new DecimalFormat ("#, ###, ###, ###, ###, ###, ## 0. ###### "); df.format (d); J'ai assigné le JTextField comme éditeur pour ma colonne MAIS j'ai toujours le même problème? Des idées? Ai-je manqué quelque chose? Mike – Michael

+0

@Michael - Je pense que vous devriez utiliser un JFormattedTextField, pour cette tâche. Je ne sais pas exactement ce que vous avez fait avec le JTextField normal et un DecimalFormat, mais l'utilisation normale devrait être de créer un JformattedTextField et lui donner le DecimalFormat comme argument: http://java.sun.com/javase/7/docs /api/javax/swing/JFormattedTextField.html#JFormattedTextField(java.text.Format) – Gnoupi

1

Si l'on considère que votre colonne est de classe Double vous pouvez effectuer les opérations suivantes:

DecimalFormat df = new DecimalFormat ("#,##0.######"); 
JFormattedTextField fmtTxtField = new JFormattedTextField(df); 
TableCellEditor cellEditor = new DefaultCellEditor(fmtTxtField); 
table.setDefaultEditor(Double.class, new DefaultCellEditor(fmtTxtField)); 

mais vous devez remplacer la mise en œuvre des délégués par défaut de DefaultCellEditor. (Au moins dans java6)

//DEFAULT IMPLEMENTATION INSIDE THE CONSTRUCTOR 
.... 
public DefaultCellEditor(final JTextField textField) { 
    editorComponent = textField; 
    this.clickCountToStart = 2; 
    delegate = new EditorDelegate() { 
     public void setValue(Object value) { 
      textField.setText((value != null) ? value.toString() : ""); 
     } 

     public Object getCellEditorValue() { 
      return textField.getText(); 
     } 
    }; 
textField.addActionListener(delegate); 
} 
.... 

//YOUR IMPLEMENTATION 
public class DoublesCellEditor extends DefaultCellEditor { 

    private JFormattedTextField textField; 

    public DoublesCellEditor(JFormattedTextField jft) { 
     super(jft); 
     this.textField = jft; 
     super.delegate = new EditorDelegate() { 
      public void setValue(Object value) { 
       textField.setValue(value != null ? ((Number) value).doubleValue() : value); 
      } 

      public Object getCellEditorValue() { 
       Object value = textField.getValue(); 
       return value != null ? ((Number) value).doubleValue() : value; 
      } 
     }; 
    } 
} 

Et utiliser:

table.setDefaultEditor(Double.class, new DoublesCellEditor(fmtTxtField));