OSDN Git Service

番組追跡、キーワード検索の重複登録問題の改善
[tainavi/TinyBannavi.git] / TinyBannavi / src / tainavi / JListSortDialog.java
1 package tainavi;\r
2 \r
3 import java.awt.Dimension;\r
4 import java.awt.event.ActionEvent;\r
5 import java.awt.event.ActionListener;\r
6 import java.util.ArrayList;\r
7 \r
8 import javax.swing.JButton;\r
9 import javax.swing.JDialog;\r
10 import javax.swing.JPanel;\r
11 import javax.swing.JScrollPane;\r
12 import javax.swing.ListSelectionModel;\r
13 import javax.swing.ScrollPaneConstants;\r
14 import javax.swing.SpringLayout;\r
15 import javax.swing.table.DefaultTableModel;\r
16 \r
17 \r
18 public class JListSortDialog extends JDialog {\r
19 \r
20         private static final long serialVersionUID = 1L;\r
21 \r
22         private boolean reg = false;\r
23         \r
24         private ArrayList<String> rowData = null;\r
25 \r
26         private JPanel jpan = null;\r
27         private JButton jbtn_update = null;\r
28         private JButton jbtn_cancel = null;\r
29         private JButton jbtn_sort = null;\r
30         private JButton jbtn_remove = null;\r
31         private JButton jbtn_up = null;\r
32         private JButton jbtn_down = null;\r
33         \r
34         private JScrollPane jscr_entries = null;\r
35         private JNETable jtbl_entries = null;\r
36         \r
37         /*\r
38          *  コンストラクタ\r
39          */\r
40         \r
41         public JListSortDialog(String wTitle, ArrayList<String> oList) {\r
42                 \r
43                 super();\r
44 \r
45                 rowData = oList;\r
46                 \r
47                 this.setModal(true);\r
48                 this.setTitle(wTitle);\r
49                 this.setContentPane(getJPan());\r
50                 \r
51                 // タイトルバーの高さも考慮する必要がある\r
52                 Dimension d = jpan.getPreferredSize();\r
53                 this.pack();\r
54                 this.setPreferredSize(new Dimension(\r
55                                 d.width+(this.getInsets().left+this.getInsets().right),\r
56                                 d.height+(this.getInsets().top+this.getInsets().bottom)));\r
57                 this.setResizable(false);\r
58         }\r
59         \r
60         /*\r
61          * 公開メソッド\r
62          */\r
63         \r
64         public boolean isRegistered() { return reg; } \r
65 \r
66         /*\r
67          * 非公開メソッド\r
68          */\r
69 \r
70         private JPanel getJPan() {\r
71                 if (jpan == null) {\r
72                         \r
73                         jpan = new JPanel();\r
74                         jpan.setLayout(new SpringLayout());\r
75                         \r
76                         //\r
77                         int y = 10;\r
78                         CommonSwingUtils.putComponentOn(jpan, getJScr_entries(), 400, 500, 10, y);\r
79                         \r
80                         CommonSwingUtils.putComponentOn(jpan, getJBtn_sort("ソート"), 100, 25, 10+400+10, y+500-(10+25)*8);\r
81                         \r
82                         CommonSwingUtils.putComponentOn(jpan, getJBtn_remove("削除"), 100, 25, 10+400+10, y+500-(10+25)*4);\r
83                         \r
84                         CommonSwingUtils.putComponentOn(jpan, getJBtn_up("上へ"), 100, 25, 10+400+10, y+500-(10+25)*2);\r
85                         CommonSwingUtils.putComponentOn(jpan, getJBtn_down("下へ"), 100, 25, 10+400+10, y+500-(10+25)*1);\r
86 \r
87                         y+=(500+10);\r
88                         \r
89                         CommonSwingUtils.putComponentOn(jpan, getJBtn_update("更新"), 100, 25, 10+20, y);\r
90                         CommonSwingUtils.putComponentOn(jpan, getJBtn_cancel("キャンセル"), 100, 25, 10+400-(100+20), y);\r
91                         \r
92                         y+=(25+10);\r
93                         \r
94                         Dimension d = new Dimension(530,y);\r
95                         jpan.setPreferredSize(d);\r
96                 }\r
97                 return jpan;\r
98         }\r
99 \r
100         // テーブル作成\r
101         private JScrollPane getJScr_entries() {\r
102                 if (jscr_entries == null) {\r
103                         jscr_entries = new JScrollPane();\r
104                         jscr_entries.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);\r
105                         jscr_entries.getVerticalScrollBar().setUnitIncrement(25);\r
106                         jscr_entries.setViewportView(getJTbl_entries());\r
107                 }\r
108                 return jscr_entries;\r
109         }\r
110         private JNETable getJTbl_entries() {\r
111                 if (jtbl_entries == null) {\r
112                         String[] colname = { "アイテム" };\r
113                         DefaultTableModel model = new DefaultTableModel(colname,0);\r
114                         jtbl_entries = new JNETable(model,false) {\r
115 \r
116                                 private static final long serialVersionUID = 1L;\r
117 \r
118                                 @Override\r
119                                 public Object getValueAt(int row, int column) {\r
120                                         return rowData.get(row);\r
121                                 }\r
122                                 @Override\r
123                                 public int getRowCount() {\r
124                                         return rowData.size();\r
125                                 }\r
126                         };\r
127                         jtbl_entries.getTableHeader().setReorderingAllowed(false);\r
128                         \r
129                         // 本来ならコンストラクタで指定できるべきであったが\r
130                         jtbl_entries.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);\r
131                 }\r
132                 return jtbl_entries;\r
133         }\r
134         \r
135         // ソート\r
136         private JButton getJBtn_sort(String s) {\r
137                 if (jbtn_sort == null) {\r
138                         jbtn_sort = new JButton(s);\r
139                         jbtn_sort.addActionListener(new ActionListener() {\r
140                                 @Override\r
141                                 public void actionPerformed(ActionEvent e) {\r
142                                         ArrayList<String> tmpData = new ArrayList<String>();\r
143                                         for ( String data : rowData ) {\r
144                                                 int index = 0;\r
145                                                 for ( ; index<tmpData.size(); index++ ) {\r
146                                                         String tmp = tmpData.get(index);\r
147                                                         if ( tmp.compareTo(data) > 0 ) {\r
148                                                                 break;\r
149                                                         }\r
150                                                 }\r
151                                                 tmpData.add(index,data);\r
152                                         }\r
153                                         \r
154                                         rowData.clear();\r
155                                         for ( String tmp : tmpData ) {\r
156                                                 rowData.add(tmp);\r
157                                         }\r
158                                         \r
159                                         ((DefaultTableModel) jtbl_entries.getModel()).fireTableDataChanged();\r
160                                 }\r
161                         });\r
162                 }\r
163                 return jbtn_sort;\r
164         }\r
165         \r
166         // 削除\r
167         private JButton getJBtn_remove(String s) {\r
168                 if (jbtn_remove == null) {\r
169                         jbtn_remove = new JButton(s);\r
170                         jbtn_remove.addActionListener(new ActionListener() {\r
171                                 @Override\r
172                                 public void actionPerformed(ActionEvent e) {\r
173                                         int vrow = jtbl_entries.getSelectedRow();\r
174                                         for ( int i=0; i<jtbl_entries.getSelectedRowCount(); i++ ) {\r
175                                                 rowData.remove(vrow);\r
176                                         }\r
177                                         ((DefaultTableModel) jtbl_entries.getModel()).fireTableDataChanged();\r
178                                 }\r
179                         });\r
180                 }\r
181                 return jbtn_remove;\r
182         }\r
183         \r
184         // 上へ・下へ\r
185         private JButton getJBtn_up(String s) {\r
186                 if (jbtn_up == null) {\r
187                         jbtn_up = new JButton(s);\r
188                         jbtn_up.addActionListener(new ActionListener() {\r
189                                 @Override\r
190                                 public void actionPerformed(ActionEvent e) {\r
191                                         int vrow = jtbl_entries.getSelectedRow();\r
192                                         int cnt = jtbl_entries.getSelectedRowCount();\r
193                                         if (vrow >= 1) {\r
194                                                 String a = rowData.get(vrow-1);\r
195                                                 for ( int i=0; i<cnt; i++ ) {\r
196                                                         rowData.set(vrow+i-1,rowData.get(vrow+i));\r
197                                                 }\r
198                                                 rowData.set(vrow+cnt-1,a);\r
199                                                 ((DefaultTableModel) jtbl_entries.getModel()).fireTableDataChanged();\r
200                                                 jtbl_entries.setRowSelectionInterval(vrow-1, vrow-1+(cnt-1));\r
201                                         }\r
202                                 }\r
203                         });\r
204                 }\r
205                 return jbtn_up;\r
206         }\r
207         private JButton getJBtn_down(String s) {\r
208                 if (jbtn_down == null) {\r
209                         jbtn_down = new JButton(s);\r
210                         jbtn_down.addActionListener(new ActionListener() {\r
211                                 @Override\r
212                                 public void actionPerformed(ActionEvent e) {\r
213                                         int vrow = jtbl_entries.getSelectedRow();\r
214                                         int cnt = jtbl_entries.getSelectedRowCount();\r
215                                         if ((vrow+cnt-1) <= jtbl_entries.getRowCount()-2) {\r
216                                                 String a = rowData.get(vrow+cnt);\r
217                                                 for ( int i=cnt-1; i>=0; i-- ) {\r
218                                                         rowData.set(vrow+i+1,rowData.get(vrow+i));\r
219                                                 }\r
220                                                 rowData.set(vrow,a);\r
221                                                 ((DefaultTableModel) jtbl_entries.getModel()).fireTableDataChanged();\r
222                                                 jtbl_entries.setRowSelectionInterval(vrow+1, vrow+1+(cnt-1));\r
223                                         }\r
224                                 }\r
225                         });\r
226                 }\r
227                 return jbtn_down;\r
228         }\r
229         \r
230         //\r
231         private JButton getJBtn_update(String s) {\r
232                 if (jbtn_update == null) {\r
233                         jbtn_update = new JButton(s);\r
234                         jbtn_update.addActionListener(new ActionListener() {\r
235                                 @Override\r
236                                 public void actionPerformed(ActionEvent e) {\r
237                                         reg = true;\r
238                                         dispose();\r
239                                 }\r
240                         });\r
241                 }\r
242                 return jbtn_update;\r
243         }\r
244         private JButton getJBtn_cancel(String s) {\r
245                 if (jbtn_cancel == null) {\r
246                         jbtn_cancel = new JButton(s);\r
247                         jbtn_cancel.addActionListener(new ActionListener() {\r
248                                 @Override\r
249                                 public void actionPerformed(ActionEvent e) {\r
250                                         reg = false;\r
251                                         dispose();\r
252                                 }\r
253                         });\r
254                 }\r
255                 return jbtn_cancel;\r
256         }\r
257 }\r