4 * License : The MIT License
5 * Copyright(c) 2012 olyutorskii
8 package jp.sfjp.jindolf.glyph;
10 import javax.swing.JList;
11 import javax.swing.ListModel;
12 import javax.swing.ListSelectionModel;
13 import javax.swing.event.ListDataEvent;
14 import javax.swing.event.ListDataListener;
19 * <p>フォント一覧の遅延読み込みに対応。
21 @SuppressWarnings("serial")
22 public class FontSelectList extends JList<String>
23 implements ListDataListener {
25 private String selectedFamily = null;
31 public FontSelectList(){
34 ListModel<String> fontListModel = new FontListModel();
35 setModelImpl(fontListModel);
36 setVisibleRowCount(-1);
37 setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
43 * {@link setModel(ListModel)} の下請けメソッド。
44 * 与えられたモデルの更新は監視対象となる。
47 private void setModelImpl(ListModel<String> model){
48 ListModel<String> oldModel = getModel();
50 oldModel.removeListDataListener(this);
53 model.addListDataListener(this);
55 super.setModel(model);
62 * 与えられたモデルの更新は監視対象となる。
63 * @param model {@inheritDoc}
66 public void setModel(ListModel<String> model){
72 * 指定したフォントファミリ名が選択された状態にする。
73 * @param family フォントファミリ名
75 public void setSelectedFamily(String family){
76 this.selectedFamily = family;
83 * @return 選択されたファミリ名。何も選択されていなければnull
85 public String getSelectedFamily(){
86 Object selected = getSelectedValue();
87 if(selected == null) return null;
88 String result = selected.toString();
93 * 過去に指示された選択ファミリを用いて再選択操作を試みる。
95 private void reSelectFamily(){
96 boolean shouldScroll = true;
97 setSelectedValue(this.selectedFamily, shouldScroll);
103 * データモデル変更に伴い再選択処理を行う。
104 * @param event {@inheritDoc}
107 public void contentsChanged(ListDataEvent event){
114 * データモデル変更に伴い再選択処理を行う。
115 * @param event {@inheritDoc}
118 public void intervalAdded(ListDataEvent event){
125 * データモデル変更に伴い再選択処理を行う。
126 * @param event {@inheritDoc}
129 public void intervalRemoved(ListDataEvent event){