* フォントファミリ名一覧表示用リストのデータモデル。
* <p>環境によってはフォントリストを完成させるのに
* 数千msかかる場合があるので、その対策として非同期に一覧を読み込む。
- * <p>実際のリスト作成は裏で走るタスクにより行われ、
+ * <p>実際のリスト作成はEDTにより行われ、
* リスト完成の暁にはEDTによりリスナに通知される。
* 一般的なリストモデルと同様、
* 基本的にスレッド間競合の問題はEDTで解決すること。
@SuppressWarnings("serial")
public class FontListModel extends AbstractListModel {
- private final List<String> familyList = new LinkedList<String>();
+ private static final FontEnv DEFAULT_FONTENV = FontEnv.DEFAULT;
- private volatile boolean hasDone = false;
+ private final List<String> familyList = new LinkedList<String>();
/**
* コンストラクタ。
- * <p>ã\82³ã\83³ã\82¹ã\83\88ã\83©ã\82¯ã\82¿å®\8cäº\86ã\81¨å\90\8cæ\99\82ã\81«ã\83ªã\82¹ã\83\88ç\94\9fæ\88\90ã\82¿ã\82¹ã\82¯ã\81\8cè£\8fで走り始める。
+ * <p>ã\83ªã\82¹ã\83\88å\9f\8bã\82\81ã\82¿ã\82¹ã\82¯ã\81\8cEDTで走り始める。
*/
public FontListModel(){
super();
- Runnable task = createFillTask();
- startTask(task);
-
- return;
- }
-
- /**
- * フォントリスト埋めタスクを生成する。
- * @return タスク
- */
- private Runnable createFillTask(){
- Runnable task = new Runnable(){
- /** {@inheritDoc} */
- @Override
- @SuppressWarnings("CallToThreadYield")
- public void run(){
- Thread.yield();
- fillModel();
- }
- };
-
- return task;
- }
-
- /**
- * フォントファミリ名リストを設定する。
- * @param familyNames フォントファミリ名のリスト
- * @return リストの要素数
- */
- private int fillList(List<String> familyNames){
- this.familyList.addAll(familyNames);
- this.hasDone = true;
- int size = this.familyList.size();
- return size;
- }
-
- /**
- * フォントリストを収集しモデルに反映させる。
- */
- private void fillModel(){
- final List<String> fontList = FontUtils.createFontList();
-
// スレッド間競合を避けるため、ここより先の処理はEDT任せ。
EventQueue.invokeLater(new Runnable(){
/** {@inheritDoc} */
@Override
public void run(){
- int size = fillList(fontList);
+ List<String> fontList = DEFAULT_FONTENV.getFontFamilyList();
+ FontListModel model = FontListModel.this;
+ model.familyList.addAll(fontList);
+ int size = model.familyList.size();
if(size <= 0) return;
int begin = 0;
}
/**
- * フォントリスト埋めタスクを起動する。
- * @param task タスク
- */
- private void startTask(Runnable task){
- Thread thread = new Thread(task);
- thread.start();
- return;
- }
-
- /**
- * モデルが完成済みか否か判定する。
- * @return モデルが完成していればtrue
- */
- public boolean hasCompleted(){
- return this.hasDone;
- }
-
- /**
* {@inheritDoc}
* @param index {@inheritDoc}
* @return {@inheritDoc}