OSDN Git Service

コメント内空白調整
[jindolf/Jindolf.git] / src / main / java / jp / sfjp / jindolf / glyph / FontSelectList.java
1 /*
2  * font select list
3  *
4  * License : The MIT License
5  * Copyright(c) 2012 olyutorskii
6  */
7
8 package jp.sfjp.jindolf.glyph;
9
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;
15
16 /**
17  * フォント選択リスト。
18  *
19  * <p>フォント一覧の遅延読み込みに対応。
20  */
21 @SuppressWarnings("serial")
22 public class FontSelectList extends JList<String>
23         implements ListDataListener {
24
25     private String selectedFamily = null;
26
27
28     /**
29      * コンストラクタ。
30      */
31     public FontSelectList(){
32         super();
33
34         ListModel<String> fontListModel = new FontListModel();
35         setModelImpl(fontListModel);
36         setVisibleRowCount(-1);
37         setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
38
39         return;
40     }
41
42     /**
43      * {@link setModel(ListModel)} の下請けメソッド。
44      * 与えられたモデルの更新は監視対象となる。
45      * @param model リストモデル
46      */
47     private void setModelImpl(ListModel<String> model){
48         ListModel<String> oldModel = getModel();
49         if(oldModel != null){
50             oldModel.removeListDataListener(this);
51         }
52
53         model.addListDataListener(this);
54
55         super.setModel(model);
56
57         return;
58     }
59
60     /**
61      * {@inheritDoc}
62      * 与えられたモデルの更新は監視対象となる。
63      * @param model {@inheritDoc}
64      */
65     @Override
66     public void setModel(ListModel<String> model){
67         setModelImpl(model);
68         return;
69     }
70
71     /**
72      * 指定したフォントファミリ名が選択された状態にする。
73      * @param family フォントファミリ名
74      */
75     public void setSelectedFamily(String family){
76         this.selectedFamily = family;
77         reSelectFamily();
78         return;
79     }
80
81     /**
82      * 選択されたファミリ名を返す。
83      * @return 選択されたファミリ名。何も選択されていなければnull
84      */
85     public String getSelectedFamily(){
86         Object selected = getSelectedValue();
87         if(selected == null) return null;
88         String result = selected.toString();
89         return result;
90     }
91
92     /**
93      * 過去に指示された選択ファミリを用いて再選択操作を試みる。
94      */
95     private void reSelectFamily(){
96         boolean shouldScroll = true;
97         setSelectedValue(this.selectedFamily, shouldScroll);
98         return;
99     }
100
101     /**
102      * {@inheritDoc}
103      * データモデル変更に伴い再選択処理を行う。
104      * @param event {@inheritDoc}
105      */
106     @Override
107     public void contentsChanged(ListDataEvent event){
108         reSelectFamily();
109         return;
110     }
111
112     /**
113      * {@inheritDoc}
114      * データモデル変更に伴い再選択処理を行う。
115      * @param event {@inheritDoc}
116      */
117     @Override
118     public void intervalAdded(ListDataEvent event){
119         reSelectFamily();
120         return;
121     }
122
123     /**
124      * {@inheritDoc}
125      * データモデル変更に伴い再選択処理を行う。
126      * @param event {@inheritDoc}
127      */
128     @Override
129     public void intervalRemoved(ListDataEvent event){
130         reSelectFamily();
131         return;
132     }
133
134 }