a9e303c48cc343fa9e198ab598253fee2d0232e9
[jalview.git] / src / jalview / fts / core / DecimalFormatTableCellRenderer.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.fts.core;
22
23 import java.awt.Component;
24 import java.text.DecimalFormat;
25
26 import javax.swing.JLabel;
27 import javax.swing.JTable;
28 import javax.swing.table.DefaultTableCellRenderer;
29
30 /**
31  * The class to handle the formatting of the double values for JTable cells.
32  */
33 public class DecimalFormatTableCellRenderer extends
34         DefaultTableCellRenderer
35 {
36   private DecimalFormat formatter;
37
38   public DecimalFormatTableCellRenderer(boolean isFormated,
39           int significantFigures)
40   {
41     String integerFormater = isFormated ? "###,##0" : "0";
42     String fractionFormater = isFormated ? "###,##0." : "0.";
43     if (significantFigures > 0)
44     {
45       StringBuilder significantFigureBuilder = new StringBuilder();
46       for (int x = 1; x <= significantFigures; ++x)
47       {
48         significantFigureBuilder.append("0");
49       }
50       formatter = new DecimalFormat(fractionFormater
51               + significantFigureBuilder.toString());
52     }
53     else
54     {
55       formatter = new DecimalFormat(integerFormater);
56     }
57     super.setHorizontalAlignment(JLabel.RIGHT);
58   }
59
60   public DecimalFormatTableCellRenderer()
61   {
62     super.setHorizontalAlignment(JLabel.RIGHT);
63   }
64
65   @Override
66   public Component getTableCellRendererComponent(JTable table,
67           Object value, boolean isSelected, boolean hasFocus, int row,
68           int column)
69   {
70     if (value == null)
71     {
72       return null;
73     }
74
75     value = formatter.format(value);
76
77     return super.getTableCellRendererComponent(table, value, isSelected,
78             hasFocus, row, column);
79   }
80 }