2016-06-16 25 views
0

Ich habe eine JTable, die eine Spalte von Doppel anzeigt, und ich möchte die Genauigkeit auf 4 Stellen beschränken. Mit einem benutzerdefinierten CellRenderer ist dies problemlos möglich. Wenn ein Benutzer jedoch eine Zelle auswählt, um den Wert zu bearbeiten, muss dieser ebenfalls auf vier Dezimalstellen abgeschnitten werden. Ich möchte wirklich nicht, dass Benutzer etwas wie 1.23423428384 eingeben können.JTable Zelle Editor Dezimilierungsschwelle

Ich habe viele Threads auf Cell-Editoren gelesen, kann aber kein minimales funktionierendes Beispiel finden, um etwas so einfach zu machen. Im Folgenden habe ich ein funktionierendes Beispiel für eine Tabelle mit einem Stubbed-Beispiel für den Editor geschrieben. Wenn jemand die stubbed-Methoden ausfüllen könnte, um zu verhindern, dass Benutzer> 4 Dezimalstellen eingeben, wäre das enorm hilfreich.

package sandbox; 

import java.awt.Component; 
import javax.swing.AbstractCellEditor; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.SwingUtilities; 
import javax.swing.table.TableCellEditor; 

public class TableExample extends JFrame { 

    public TableExample() { 
     //headers for the table 
     String[] columns = new String[]{ 
      "Id", "Name", "Hourly Rate", "Part Time" 
     }; 

     //actual data for the table in a 2d array 
     Object[][] data = new Object[][]{ 
      {1, "John", 40.0, false}, 
      {2, "Rambo", 70.0, false}, 
      {3, "Zorro", 60.0, true},}; 

     //create table with data 
     JTable table = new JTable(data, columns); 

     /** 
     * SET EDITOR HERE 
     */ 
     table.getColumnModel().getColumn(2).setCellEditor(new DecimalEditor()); 

     //add the table to the frame 
     this.add(new JScrollPane(table)); 
     this.setTitle("Table Example"); 

     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.pack(); 
     this.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new TableExample(); 
      } 
     }); 
    } 

    public class DecimalEditor extends AbstractCellEditor implements TableCellEditor { 

     @Override 
     public Object getCellEditorValue() { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public Component getTableCellEditorComponent(JTable jtable, Object o, boolean bln, int i, int i1) { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 
    } 

} 

Antwort

2

Versuchen Sie, eine DefaultCellEditor verwenden.

Der Konstruktor akzeptiert einen JTextField als Editor.

In Ihrem Fall jedoch möchten Sie den Editor mit einem JFormattedTextField erstellen. Dann können Sie die MaskFormat angeben, die Sie die Anzahl der Dezimalstellen begrenzen möchten.

+0

Danke. Ist das JTextField, was in der Zelle angezeigt wird, wenn der Benutzer tippt? –