Here is a simple example for use progress bars in jTable
using Java language. In this case I want
to display a table with some registration numbers of students and their attendance percentage with the conducted sessions
and the attendant sessions.
Suppose I want to display the attendance percentage in the
last column of the table using jProgressBar.
1st column :- Reg No
2nd column :- Conducted sessions
3rdcolumn :- Attended sessions
4thcolumn :- Percentage of the attendance
- First we need to prepare our data set to be added to the table. In this case the data is hard coded in the code itself(first yellow highlighted section ). You can use your own way to get the data to the method.
- We can indicate the progress bar colors with different colors. To do that we have to first set the percentage ranges to the the progress bar(second highlighted section).
Here is the code segment for do that task, you can customize this coding according to your requirement.
Code
public class IndicatorTableExample extends JPanel {
private static final int MAX = 100;
private static final int MIN = 0;
public IndicatorTableExample() {
setLayout(new BorderLayout());
DefaultTableModel dm = new DefaultTableModel() {
public Class getColumnClass(int col) {
switch (col) {
case 0:
return String.class;
case 1:
return Integer.class;
case 2:
return Integer.class;
default:
return Object.class;
}
}
public boolean isCellEditable(int row, int col) {
switch (col) {
case 2:
return false;
default:
return true;
}
}
public void setValueAt(Object obj, int row, int col) {
if (col != 1) {
super.setValueAt(obj, row, col);
return;
}
try {
Integer integer = new Integer(obj.toString());
super.setValueAt(checkMinMax(integer), row, col);
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
}
};
dm.setDataVector(new Object[][] {
{ "ITXXXXXX", 6, 6,precentage(6,6) },
{ "ITXXXXXX",
6, 5,precentage(6,5)
},
{ "ITXXXXXX",
6, 4,precentage(6,4)
},
{
"ITXXXXXX",
6, 5,precentage(6,5)
} },
new Object[] { "Registration no", "
Conducted sessions ", "
Attended sessions", "
Percentage
" });
JTable table = new JTable(dm);
IndicatorCellRenderer renderer = new IndicatorCellRenderer(MIN, MAX);
renderer.setStringPainted(true);
renderer.setBackground(table.getBackground());
// set limit value and fill color
Hashtable limitColors = new Hashtable();
limitColors.put(new Integer(0), Color.green);
limitColors.put(new Integer(60), Color.yellow);
limitColors.put(new Integer(80), Color.red);
renderer.setLimits(limitColors);
table.getColumnModel().getColumn(2).setCellRenderer(renderer);
table.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
if (e.getType() == TableModelEvent.UPDATE) {
int col = e.getColumn();
if (col == 1) {
int row = e.getFirstRow();
TableModel model = (TableModel) e.getSource();
Integer value = (Integer) model.getValueAt(row, col);
model.setValueAt(checkMinMax(value), row, ++col);
}
}
}
});
JScrollPane pane = new JScrollPane(table);
add(pane, BorderLayout.CENTER);
}
public static void main(String[] args) {
JFrame f = new JFrame("IndicatorTable Example");
f.getContentPane()
.add(new IndicatorTableExample(), BorderLayout.CENTER);
f.setSize(400, 120);
f.setVisible(true);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
private Integer checkMinMax(Integer value) {
int intValue = value.intValue();
if (intValue < MIN) {
intValue = MIN;
} else if (MAX < intValue) {
intValue = MAX;
}
return new Integer(intValue);
}
}
/**
* @version 1.0 03/03/99
*/
class IndicatorCellRenderer extends JProgressBar implements TableCellRenderer {
private Hashtable limitColors;
private int[] limitValues;
public IndicatorCellRenderer() {
super(JProgressBar.HORIZONTAL);
setBorderPainted(false);
}
public IndicatorCellRenderer(int min, int max) {
super(JProgressBar.HORIZONTAL, min, max);
setBorderPainted(false);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
int n = 0;
if (!(value instanceof Number)) {
String str;
if (value instanceof String) {
str = (String) value;
} else {
str = value.toString();
}
try {
n = Integer.valueOf(str).intValue();
} catch (NumberFormatException ex) {
}
} else {
n = ((Number) value).intValue();
}
Color color = getColor(n);
if (color != null) {
setForeground(color);
}
setValue(n);
return this;
}
public void setLimits(Hashtable limitColors) {
this.limitColors = limitColors;
int i = 0;
int n = limitColors.size();
limitValues = new int[n];
Enumeration e = limitColors.keys();
while (e.hasMoreElements()) {
limitValues[i++] = ((Integer) e.nextElement()).intValue();
}
sort(limitValues);
}
private Color getColor(int value) {
Color color = null;
if (limitValues != null) {
int i;
for (i = 0; i < limitValues.length; i++) {
if (limitValues[i] < value) {
color = (Color) limitColors
.get(new Integer(limitValues[i]));
}
}
}
return color;
}
private void sort(int[] a) {
int n = a.length;
for (int i = 0; i < n - 1; i++) {
int k = i;
for (int j = i + 1; j < n; j++) {
if (a[j] < a[k]) {
k = j;
}
}
int tmp = a[i];
a[i] = a[k];
a[k] = tmp;
}
}
}
No comments:
Post a Comment