回答編集履歴

2

追記2

2015/09/10 22:41

投稿

argius
argius

スコア9388

test CHANGED
@@ -82,6 +82,8 @@
82
82
 
83
83
  label.setFont(new Font("monospace", Font.BOLD, 16));
84
84
 
85
+ // 良くないやりかた:追記2を参照
86
+
85
87
  return label;
86
88
 
87
89
  }
@@ -123,3 +125,101 @@
123
125
  ```
124
126
 
125
127
 
128
+
129
+ ---
130
+
131
+
132
+
133
+ (追記2)
134
+
135
+
136
+
137
+ `JLabel`をそのまま返すと選択状態が描画できなくなってしまうので、ダメでした。すみません。
138
+
139
+ `super.getTableCellRendererComponent`のコンポーネントに直接フォント変更で行けるはずです。
140
+
141
+ 選択したセルをBOLDにする`MyCellRenderer`を書いてみましたので、参考にしてください。
142
+
143
+
144
+
145
+ ```
146
+
147
+ static class MyCellRenderer extends DefaultTableCellRenderer {
148
+
149
+
150
+
151
+ JTable table;
152
+
153
+ Map<Point, Font> cellRendererMap;
154
+
155
+
156
+
157
+ public MyCellRenderer(JTable table) {
158
+
159
+ this.table = table;
160
+
161
+ this.cellRendererMap =new HashMap<>();
162
+
163
+ }
164
+
165
+
166
+
167
+ void applyBoldToSelectedCells() {
168
+
169
+ Font baseFont = table.getFont();
170
+
171
+ int[] cols = table.getSelectedColumns();
172
+
173
+ int[] rows = table.getSelectedRows();
174
+
175
+ for (int row : rows) {
176
+
177
+ for (int col : cols) {
178
+
179
+ Point k = new Point(col, row);
180
+
181
+ Font v = baseFont.deriveFont(Font.BOLD);
182
+
183
+ cellRendererMap.put(k, v);
184
+
185
+ }
186
+
187
+ }
188
+
189
+ table.updateUI();
190
+
191
+ }
192
+
193
+
194
+
195
+ @Override
196
+
197
+ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
198
+
199
+ boolean hasFocus, int row, int column) {
200
+
201
+ Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
202
+
203
+ Point key = new Point(column, row);
204
+
205
+ if (cellRendererMap.containsKey(key)) {
206
+
207
+ Font font = cellRendererMap.get(key);
208
+
209
+ c.setFont(font);
210
+
211
+ }
212
+
213
+ return c;
214
+
215
+ }
216
+
217
+
218
+
219
+ }
220
+
221
+ ```
222
+
223
+
224
+
225
+

1

追記

2015/09/10 22:41

投稿

argius
argius

スコア9388

test CHANGED
@@ -1,3 +1,125 @@
1
1
  `JTable.setFont`メソッドで変更できます。
2
2
 
3
3
  ただし、セルの高さは自動で変わってくれないので合わせて変更する必要があります。
4
+
5
+
6
+
7
+ ---
8
+
9
+
10
+
11
+ (追記)
12
+
13
+
14
+
15
+ セルに属性を持たせるのではなく、独自の`CellRenderer`を作ってそこで制御するようにします。
16
+
17
+ 下記の例では、特定のセルだけ、2行目の左から2列目だけ(つまり"d"だけ)フォントを変えています。
18
+
19
+
20
+
21
+ ご質問のようなことをするには、`MyCellRenderer`クラスに2次元配列を用意して、そこにフォントなどの情報を持たせるようにすればできると思います。
22
+
23
+
24
+
25
+ ```lang-java
26
+
27
+ import java.awt.Component;
28
+
29
+ import java.awt.Font;
30
+
31
+ import javax.swing.JFrame;
32
+
33
+ import javax.swing.JLabel;
34
+
35
+ import javax.swing.JTable;
36
+
37
+ import javax.swing.table.DefaultTableCellRenderer;
38
+
39
+
40
+
41
+ public final class App extends JFrame {
42
+
43
+
44
+
45
+ private JTable table;
46
+
47
+
48
+
49
+ public App() {
50
+
51
+ setTitle("App");
52
+
53
+ setDefaultCloseOperation(EXIT_ON_CLOSE);
54
+
55
+ table = new JTable(new Object[][] {
56
+
57
+ new Object[] { "a", "b" }, new Object[] { "c", "d" } },
58
+
59
+ new Object[] { "col1", "col2" });
60
+
61
+ table.setDefaultRenderer(Object.class, new MyCellRenderer());
62
+
63
+ add(table);
64
+
65
+ }
66
+
67
+
68
+
69
+ static class MyCellRenderer extends DefaultTableCellRenderer {
70
+
71
+
72
+
73
+ @Override
74
+
75
+ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
76
+
77
+ boolean hasFocus, int row, int column) {
78
+
79
+ if (row == 1 && column == 1) {
80
+
81
+ JLabel label = new JLabel(String.valueOf(value));
82
+
83
+ label.setFont(new Font("monospace", Font.BOLD, 16));
84
+
85
+ return label;
86
+
87
+ }
88
+
89
+ return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
90
+
91
+ }
92
+
93
+
94
+
95
+ }
96
+
97
+
98
+
99
+ public static void main(String[] args) {
100
+
101
+ javax.swing.SwingUtilities.invokeLater(new Runnable() {
102
+
103
+ public void run() {
104
+
105
+ App app = new App();
106
+
107
+ app.setSize(600, 200);
108
+
109
+ app.setLocationRelativeTo(null);
110
+
111
+ app.setVisible(true);
112
+
113
+ }
114
+
115
+ });
116
+
117
+ }
118
+
119
+
120
+
121
+ }
122
+
123
+ ```
124
+
125
+