OSDN Git Service

進捗バーのレンダリング
[coroid/inqubus.git] / frontend / src / yukihane / inqubus / model / TargetsColumnModel.java
1 package yukihane.inqubus.model;
2
3 import java.awt.Color;
4 import java.awt.Component;
5 import javax.swing.JProgressBar;
6 import javax.swing.JTable;
7 import javax.swing.table.DefaultTableCellRenderer;
8 import javax.swing.table.DefaultTableColumnModel;
9 import javax.swing.table.TableCellRenderer;
10 import javax.swing.table.TableColumn;
11 import javax.swing.table.TableModel;
12
13 /**
14  *
15  * @author yuki
16  */
17 public class TargetsColumnModel extends DefaultTableColumnModel {
18
19     private static final long serialVersionUID = 1L;
20     private final String[] columnNames = new String[]{"ID", "動画", "コメ", "変換", "状態"};
21
22     public TargetsColumnModel() {
23         super();
24         for (int i = 0; i < columnNames.length; i++) {
25             final TableColumn tc = new TableColumn(i);
26             tc.setHeaderValue(columnNames[i]);
27             addColumn(tc);
28         }
29
30         final TableColumn tc = getColumn(4);
31         tc.setCellRenderer(new ProgressRenderer());
32     }
33 }
34
35 class ProgressRenderer extends DefaultTableCellRenderer {
36
37     private static final long serialVersionUID = 1L;
38     private final JProgressBar progressBar;
39
40     public ProgressRenderer() {
41         progressBar = new JProgressBar(0, 100);
42         progressBar.setStringPainted(true);
43     }
44
45     @Override
46     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
47             int row, int column) {
48         if (isSelected) {
49             progressBar.setForeground(table.getSelectionForeground());
50             progressBar.setBackground(table.getSelectionBackground());
51         }
52
53         if (value == null) {
54             return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
55         }
56
57         final Progress p = (Progress) value;
58         int percent = (int) p.getPercent();
59         if (percent < 0 || percent > 100) {
60             return super.getTableCellRendererComponent(table, p.getText(), isSelected, hasFocus, row, column);
61         }
62         progressBar.setValue(percent);
63         progressBar.setString(p.getText());
64         return progressBar;
65     }
66 }