• R/O
  • HTTP
  • SSH
  • HTTPS

提交

標籤

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

テキストの各行をキーと値に分離し、複数テキストファイルを読み込み、キーを突き合わせ照合し、その結果を表示するGUIユーテリティです。


Commit MetaInfo

修訂5aa08f746bc14ff91d768e6c988e0087e973324b (tree)
時間2011-10-23 02:28:50
作者seraphy <seraphy@192....>
Commiterseraphy

Log Message

・データがないセルは灰色の背景色とする

Change Summary

差異

--- a/src/textkeymatcher/entity/DisplayMode.java
+++ b/src/textkeymatcher/entity/DisplayMode.java
@@ -33,7 +33,7 @@ public enum DisplayMode implements RowFilter {
3333 int mx = values.getDataWidth();
3434 int validColumns = 0;
3535 for (int idx = 0; idx < mx; idx++) {
36- int cnt = values.getCount(idx);
36+ int cnt = values.getRowCountAt(idx);
3737 if (cnt > 0) {
3838 // 1件以上のデータがあるカラムをカウントする.
3939 validColumns++;
@@ -55,7 +55,7 @@ public enum DisplayMode implements RowFilter {
5555 int mx = values.getDataWidth();
5656 int validColumns = 0;
5757 for (int idx = 0; idx < mx; idx++) {
58- int cnt = values.getCount(idx);
58+ int cnt = values.getRowCountAt(idx);
5959 if (cnt > 0) {
6060 // 1件以上のデータがあるカラムをカウントする.
6161 validColumns++;
@@ -76,7 +76,7 @@ public enum DisplayMode implements RowFilter {
7676 }
7777 int mx = values.getDataWidth();
7878 if (mx > 0) {
79- int cnt = values.getCount(0);
79+ int cnt = values.getRowCountAt(0);
8080 if (cnt > 0) {
8181 return true;
8282 }
@@ -95,7 +95,7 @@ public enum DisplayMode implements RowFilter {
9595 }
9696 int mx = values.getDataWidth();
9797 if (mx > 0) {
98- int cnt = values.getCount(0);
98+ int cnt = values.getRowCountAt(0);
9999 if (cnt == 0) {
100100 return true;
101101 }
@@ -112,7 +112,7 @@ public enum DisplayMode implements RowFilter {
112112 int mx = values.getDataWidth();
113113 int validColumns = 0;
114114 for (int idx = 0; idx < mx; idx++) {
115- int cnt = values.getCount(idx);
115+ int cnt = values.getRowCountAt(idx);
116116 if (cnt > 0) {
117117 // 1件以上のデータがあるカラムをカウントする.
118118 validColumns++;
@@ -131,7 +131,7 @@ public enum DisplayMode implements RowFilter {
131131 int mx = values.getDataWidth();
132132 int validColumns = 0;
133133 for (int idx = 0; idx < mx; idx++) {
134- int cnt = values.getCount(idx);
134+ int cnt = values.getRowCountAt(idx);
135135 if (cnt > 0) {
136136 // 1件以上のデータがあるカラムをカウントする.
137137 validColumns++;
@@ -150,7 +150,7 @@ public enum DisplayMode implements RowFilter {
150150 int mx = values.getDataWidth();
151151 int numOfData = 0;
152152 for (int idx = 0; idx < mx; idx++) {
153- int cnt = values.getCount(idx);
153+ int cnt = values.getRowCountAt(idx);
154154 numOfData += cnt;
155155 }
156156 // データ数が1であればユニーク
@@ -166,7 +166,7 @@ public enum DisplayMode implements RowFilter {
166166 int mx = values.getDataWidth();
167167 int numOfData = 0;
168168 for (int idx = 0; idx < mx; idx++) {
169- int cnt = values.getCount(idx);
169+ int cnt = values.getRowCountAt(idx);
170170 numOfData += cnt;
171171 }
172172 // データ数が1でなければアンユニーク
--- a/src/textkeymatcher/entity/KeyMatchedRowView.java
+++ b/src/textkeymatcher/entity/KeyMatchedRowView.java
@@ -197,7 +197,7 @@ public class KeyMatchedRowView extends AbstractTableModel {
197197 }
198198
199199 // このキーに対して最大何行のデータがついているか?
200- int numOfRows = rowValues.getMaxCount();
200+ int numOfRows = rowValues.getMaxRowCount();
201201
202202 // 行数分だけ同じキーを繰り返す.
203203 for (int rowNumber = 0; rowNumber < numOfRows; rowNumber++) {
--- a/src/textkeymatcher/entity/RowValues.java
+++ b/src/textkeymatcher/entity/RowValues.java
@@ -13,6 +13,16 @@ import java.util.List;
1313 * @author seraphy
1414 */
1515 public class RowValues {
16+
17+ /**
18+ * データとしてNULLが登録されたことを示す.<br>
19+ */
20+ public static final Object NULL_VALUE = new Object() {
21+ @Override
22+ public String toString() {
23+ return "<NULL>";
24+ }
25+ };
1626
1727 /**
1828 * データソースごとのデータを入れる配列.<br>
@@ -40,29 +50,34 @@ public class RowValues {
4050
4151 /**
4252 * データソースと、値を指定してデータをセットする.<br>
43- * 同じデータソースですでにデータがある場合はリストとして追加される.<br>
44- * @param column データソース添字
45- * @param value データ、nullは空文字として登録される
53+ * @param dataIndex データソース添字
54+ * @param value データ、null可
4655 */
47- public void add(int column, String value) {
56+ public void add(int dataIndex, String value) {
57+ Object val;
4858 if (value == null) {
49- value = "";
59+ val = NULL_VALUE;
60+ } else {
61+ val = value;
5062 }
51- if (datas[column] == null) {
63+
64+ if (datas[dataIndex] == null) {
5265 // 新規の場合
53- datas[column] = value;
54- } else if (datas[column] instanceof List) {
66+ datas[dataIndex] = val;
67+
68+ } else if (datas[dataIndex] instanceof List) {
5569 // すでに2要素以上ある場合
5670 @SuppressWarnings(value = "unchecked")
57- List<String> lst = (List<String>) datas[column];
58- lst.add(value);
71+ List<Object> lst = (List<Object>) datas[dataIndex];
72+ lst.add(val);
73+
5974 } else {
6075 // すでに存在する場合はリストにつめ直す.
61- assert datas[column] instanceof String;
62- List<String> tmp = new ArrayList<String>();
63- tmp.add((String) datas[column]);
64- tmp.add(value);
65- datas[column] = tmp;
76+ assert datas[dataIndex] instanceof String;
77+ List<Object> tmp = new ArrayList<Object>();
78+ tmp.add(datas[dataIndex]);
79+ tmp.add(val);
80+ datas[dataIndex] = tmp;
6681 }
6782 }
6883
@@ -71,11 +86,11 @@ public class RowValues {
7186 * すべてのデータソースにひとつもデータがなければ0となる.<br>
7287 * @return 最大のデータ数
7388 */
74- public int getMaxCount() {
89+ public int getMaxRowCount() {
7590 int mx = 0;
7691 int dataWidth = datas.length;
7792 for (int dataIndex = 0; dataIndex < dataWidth; dataIndex++) {
78- int count = getCount(dataIndex);
93+ int count = getRowCountAt(dataIndex);
7994 if (count > mx) {
8095 mx = count;
8196 }
@@ -85,19 +100,19 @@ public class RowValues {
85100
86101 /**
87102 * 指定したデータソースのデータの個数を返す.
88- * @param column 添字
103+ * @param dataIndex 添字
89104 * @return データの個数、未登録ならば0
90105 */
91- public int getCount(int column) {
92- if (column < 0 || column >= datas.length) {
106+ public int getRowCountAt(int dataIndex) {
107+ if (dataIndex < 0 || dataIndex >= datas.length) {
93108 // 範囲外、データがないので0を返す.
94109 return 0;
95110 }
96- Object data = datas[column];
111+ Object data = datas[dataIndex];
97112 if (data != null && data instanceof List) {
98113 // リスト格納であれば、要素数を返す
99114 @SuppressWarnings(value = "unchecked")
100- List<String> lst = (List<String>) datas[column];
115+ List<Object> lst = (List<Object>) datas[dataIndex];
101116 return lst.size();
102117 }
103118 // 非nullで、リストでなければ単一要素なので1を返す
@@ -110,35 +125,59 @@ public class RowValues {
110125
111126 /**
112127 * 指定したデータソースの指定した番号のデータを取り出す.<br>
113- * 範囲外、もしくはデータ未登録である場合は空文字が返される.<br>
128+ * データ未登録である場合、および範囲外を指定した場合はnullが返される.<br>
129+ * データがnull値の場合は{@link #NULL_VALUE}が返される.<br>
114130 * @param column データソース番号
115131 * @param rowIndex データのインデックス、getCountで得られる個数分
116- * @return データ、無し、もしくは範囲外の場合は空文字
132+ * @return データ、{@link #NULL_VALUE}、もしくはデータなしの場合および範囲外の場合はnull
117133 */
118- public String get(int column, int rowIndex) {
134+ public Object getRaw(int column, int rowIndex) {
119135 if (column < 0 || column >= datas.length) {
120- return "";
136+ return null;
121137 }
122138 Object data = datas[column];
123139 if (data == null) {
124- return "";
140+ // このカラムでは、データ未登録
141+ return null;
125142 }
143+
126144 if (data instanceof List) {
127145 @SuppressWarnings(value = "unchecked")
128- List<String> lst = (List<String>) data;
146+ List<Object> lst = (List<Object>) data;
129147 if (rowIndex >= 0 && rowIndex < lst.size()) {
130148 // 複数データならば存在する行分だけ
131149 return lst.get(rowIndex);
132150 }
133151 // 範囲外であればデータなし
134- return "";
152+ return null;
135153 }
154+
136155 if (rowIndex == 0) {
137- // 単一データは先頭行のみ
138- return (String) data;
156+ // 単一データは先頭行のみ (データ未登録の場合はnull)
157+ return data;
139158 }
140159 // 単一データで次行以降はデータなし。
141- return "";
160+ return null;
161+ }
162+
163+ /**
164+ * 指定したデータソースの指定した番号のデータを取り出す.<br>
165+ * データ未登録である場合、および範囲外を指定した場合はnullが返される.<br>
166+ * 登録データがNULL値である場合は空文字が返される.<bf>
167+ * @param column データソース番号
168+ * @param rowIndex データのインデックス、getCountで得られる個数分
169+ * @return データ、もしくは空白、データなしの場合および範囲外の場合はnull
170+ */
171+ public String get(int column, int rowIndex) {
172+ Object value = getRaw(column, rowIndex);
173+ assert value == null || value instanceof String || NULL_VALUE.equals(value);
174+ if (value != null) {
175+ if (NULL_VALUE.equals(value)) {
176+ return "";
177+ }
178+ return (String) value;
179+ }
180+ return null;
142181 }
143182
144183 }
--- a/src/textkeymatcher/ui/TextKeyMatcherView.java
+++ b/src/textkeymatcher/ui/TextKeyMatcherView.java
@@ -58,10 +58,15 @@ public class TextKeyMatcherView extends FrameView implements ExitListener {
5858 private static final Logger logger = Logger.getLogger(TextKeyMatcherView.class.getName());
5959
6060 /**
61- * テーブルの偶数行のカラー
61+ * テーブルの偶数行の背景色
6262 */
6363 private Color evenColor = new Color(240, 240, 255);
6464
65+ /**
66+ * データがnullである場合の背景色
67+ */
68+ private Color nullValueColor = new Color(220, 220, 220);
69+
6570
6671 public TextKeyMatcherView(SingleFrameApplication app) {
6772 super(app);
@@ -175,9 +180,15 @@ public class TextKeyMatcherView extends FrameView implements ExitListener {
175180
176181 } else {
177182 setForeground(table.getForeground());
178- int serialNo = dataViewTableModel.getRowGroupSerialNo(row);
179- boolean even = (serialNo % 2 == 0);
180- setBackground(even ? getEvenColor() : table.getBackground());
183+
184+ if (value == null) {
185+ setBackground(getNullValueColor());
186+
187+ } else {
188+ int serialNo = dataViewTableModel.getRowGroupSerialNo(row);
189+ boolean even = (serialNo % 2 == 0);
190+ setBackground(even ? getEvenColor() : table.getBackground());
191+ }
181192 }
182193
183194 setHorizontalAlignment((value instanceof Number) ? RIGHT : LEFT);
@@ -208,6 +219,23 @@ public class TextKeyMatcherView extends FrameView implements ExitListener {
208219 public Color getEvenColor() {
209220 return this.evenColor;
210221 }
222+
223+ public void setNullValueColor(Color nullValueColor) {
224+ if (nullValueColor == null) {
225+ throw new IllegalArgumentException();
226+ }
227+ Color oldValue = this.nullValueColor;
228+ this.nullValueColor = nullValueColor;
229+ firePropertyChange("nullValueColor", oldValue, nullValueColor);
230+ }
231+
232+ /**
233+ * データがnullである場合の背景色を取得する.
234+ * @return 背景色
235+ */
236+ public Color getNullValueColor() {
237+ return this.nullValueColor;
238+ }
211239
212240 /**
213241 * アプリケーション情報ダイアログを表示する.