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
8 import javax.swing.DefaultComboBoxModel;
\r
9 import javax.swing.JButton;
\r
10 import javax.swing.JCheckBox;
\r
11 import javax.swing.JComboBox;
\r
12 import javax.swing.JComponent;
\r
13 import javax.swing.JDialog;
\r
14 import javax.swing.JLabel;
\r
15 import javax.swing.JOptionPane;
\r
16 import javax.swing.JPanel;
\r
17 import javax.swing.JSlider;
\r
18 import javax.swing.JTextField;
\r
19 import javax.swing.SpringLayout;
\r
20 import javax.swing.event.ChangeEvent;
\r
21 import javax.swing.event.ChangeListener;
\r
29 public class VWTraceKeyDialog extends JDialog {
\r
31 private static final long serialVersionUID = 1L;
\r
33 private TraceProgram xKeys = null;
\r
34 private TraceKey xKey = null;
\r
35 private ProgDetailList xTvd = null;
\r
37 private boolean reg = false;
\r
39 public String getNewLabel() { return getNewLabel(jTextField_title.getText(),jTextField_channel.getText()); }
\r
41 public static String getNewLabel(String title, String center) { return title+" ("+center+")"; }
\r
43 private ArrayList<String> okiniiri_items = new ArrayList<String>();
\r
44 public void clean_okiniiri_items() { okiniiri_items.clear(); }
\r
45 public void add_okiniiri_item(String s) { okiniiri_items.add(s); }
\r
47 // キーワード検索の設定ウィンドウのコンポーネント
\r
49 private JPanel jPanel = null;
\r
51 private JButton jButton_title = null;
\r
52 private JTextField jTextField_title = null;
\r
53 private JLabel jLabel_channel = null;
\r
54 private JTextField jTextField_channel = null;
\r
55 private JLabel jLabel_fazzyThreshold = null;
\r
56 private JSlider jSlider_fazzyThreshold = null;
\r
57 private JLabel jLabel_okiniiri = null;
\r
58 private JComboBox jComboBox_okiniiri = null;
\r
59 private JLabel jLabel_disableRepeat = null;
\r
60 private JCheckBox jCheckBox_disableRepeat = null;
\r
61 private JLabel jLabel_showLatestOnly = null;
\r
62 private JCheckBox jCheckBox_showLatestOnly = null;
\r
63 private JButton jButton_label = null;
\r
64 private JButton jButton_cancel = null;
\r
68 public boolean isRegistered() { return reg; }
\r
70 public void open(TraceProgram sKeys, ProgDetailList tvd, int threshold) {
\r
76 jTextField_title.setText(tvd.title);
\r
77 jTextField_title.setCaretPosition(0);
\r
78 jTextField_channel.setText(tvd.center);
\r
79 jSlider_fazzyThreshold.setValue(threshold);
\r
80 jComboBox_okiniiri.setSelectedItem(TVProgram.OKINIIRI[0]);
\r
81 jCheckBox_disableRepeat.setSelected(false);
\r
82 jCheckBox_showLatestOnly.setSelected(false);
\r
84 jButton_title.setEnabled(true);
\r
87 public void reopen(String label, TraceProgram sKeys) {
\r
93 for (TraceKey k : xKeys.getTraceKeys()) {
\r
94 if (k.getLabel().equals(label)) {
\r
101 int index = xKey.getLabel().indexOf("("+xKey.getCenter()+")");
\r
103 jTextField_title.setText(xKey.getLabel().substring(0,index));
\r
106 jTextField_title.setText(xKey.getLabel());
\r
108 jTextField_title.setCaretPosition(0);
\r
109 jTextField_channel.setText(xKey.getCenter());
\r
110 jSlider_fazzyThreshold.setValue(xKey.getFazzyThreshold());
\r
111 jComboBox_okiniiri.setSelectedItem(xKey.getOkiniiri());
\r
112 jCheckBox_disableRepeat.setSelected(xKey.getDisableRepeat());
\r
113 jCheckBox_showLatestOnly.setSelected(xKey.getShowLatestOnly());
\r
115 jButton_title.setEnabled(false);
\r
119 private JPanel getJPanel() {
\r
120 if (jPanel == null) {
\r
121 jPanel = new JPanel();
\r
123 jPanel.setLayout(new SpringLayout());
\r
129 _getJComponent(jPanel, getJButton_title("番組タイトル"), lw, 25, 10, y);
\r
130 _getJComponent(jPanel, getJTextField_title(), iw, 25, ix, y);
\r
133 _getJComponent(jPanel, getJLabel_channel("チャンネル名"), lw, 25, 10, y);
\r
134 _getJComponent(jPanel, getJTextField_channel(), iw, 25, ix, y);
\r
137 _getJComponent(jPanel, getJLabel_fazzyThreshold("あいまい閾値"), lw, 25, 10, y);
\r
138 _getJComponent(jPanel, getJSlider_fazzyThreshold(), iw, 25, ix, y);
\r
141 _getJComponent(jPanel, getJLabel_okiniiri("お気に入り度"), lw, 25, 10, y);
\r
142 _getJComponent(jPanel, getJComboBox_okiniiri(), iw, 25, ix, y);
\r
145 _getJComponent(jPanel, getJLabel_disableRepeat("再放送を除く"), lw, 25, 10, y);
\r
146 _getJComponent(jPanel, getJCheckBox_disableRepeat(), iw, 25, ix, y);
\r
149 _getJComponent(jPanel, getJLabel_showLatestOnly("リピート放送を検出"), lw, 25, 10, y);
\r
150 _getJComponent(jPanel, getJCheckBox_showLatestOnly(), iw, 25, ix, y);
\r
152 int wd = 10+lw+10+iw+20;
\r
156 _getJComponent(jPanel, getJButton_label("登録"), bw, 25, (wd/2)-bw-5, y);
\r
157 _getJComponent(jPanel, getJButton_cancel("キャンセル"), bw, 25, (wd/2)+5, y);
\r
161 Dimension d = new Dimension(wd,y+10);
\r
162 jPanel.setPreferredSize(d);
\r
167 private void _getJComponent(JPanel p, JComponent c, int width, int height, int x, int y) {
\r
168 c.setPreferredSize(new Dimension(width, height));
\r
169 ((SpringLayout)p.getLayout()).putConstraint(SpringLayout.NORTH, c, y, SpringLayout.NORTH, p);
\r
170 ((SpringLayout)p.getLayout()).putConstraint(SpringLayout.WEST, c, x, SpringLayout.WEST, p);
\r
177 private JButton getJButton_title(String s) {
\r
178 if (jButton_title == null) {
\r
179 jButton_title = new JButton(s);
\r
181 jButton_title.addActionListener(new ActionListener() {
\r
183 public void actionPerformed(ActionEvent e) {
\r
184 jTextField_title.setText(jTextField_title.getText().equals(xTvd.title) ? xTvd.splitted_title : xTvd.title);
\r
185 jTextField_title.setCaretPosition(jTextField_title.getText().length());
\r
186 jTextField_title.requestFocusInWindow();
\r
190 return(jButton_title);
\r
194 private JTextField getJTextField_title() {
\r
195 if (jTextField_title == null) {
\r
196 jTextField_title = new JTextField();
\r
198 return(jTextField_title);
\r
202 private JLabel getJLabel_channel(String s) {
\r
203 if (jLabel_channel == null) {
\r
204 jLabel_channel = new JLabel(s);
\r
206 return(jLabel_channel);
\r
208 private JTextField getJTextField_channel() {
\r
209 if (jTextField_channel == null) {
\r
210 jTextField_channel = new JTextField();
\r
211 jTextField_channel.setEnabled(false);
\r
213 return(jTextField_channel);
\r
217 private JLabel getJLabel_fazzyThreshold(String s) {
\r
218 if (jLabel_fazzyThreshold == null) {
\r
219 jLabel_fazzyThreshold = new JLabel(s);
\r
221 return(jLabel_fazzyThreshold);
\r
223 private JSlider getJSlider_fazzyThreshold() {
\r
224 if (jSlider_fazzyThreshold == null) {
\r
225 jSlider_fazzyThreshold = new JSlider(1,99);
\r
227 jSlider_fazzyThreshold.addChangeListener(new ChangeListener() {
\r
229 public void stateChanged(ChangeEvent e) {
\r
231 jLabel_fazzyThreshold.setText("あいまい閾値"+jSlider_fazzyThreshold.getValue());
\r
235 return(jSlider_fazzyThreshold);
\r
239 private JLabel getJLabel_okiniiri(String s) {
\r
240 if (jLabel_okiniiri == null) {
\r
241 jLabel_okiniiri = new JLabel(s);
\r
243 return(jLabel_okiniiri);
\r
245 private JComboBox getJComboBox_okiniiri() {
\r
246 if (jComboBox_okiniiri == null) {
\r
247 jComboBox_okiniiri = new JComboBox();
\r
248 jComboBox_okiniiri.setEditable(false);
\r
250 DefaultComboBoxModel aModel = new DefaultComboBoxModel();
\r
251 jComboBox_okiniiri.setModel(aModel);
\r
252 for (String k : okiniiri_items) {
\r
253 aModel.addElement(k);
\r
256 return(jComboBox_okiniiri);
\r
260 private JLabel getJLabel_disableRepeat(String s) {
\r
261 if (jLabel_disableRepeat == null) {
\r
262 jLabel_disableRepeat = new JLabel(s);
\r
264 return(jLabel_disableRepeat);
\r
266 private JCheckBox getJCheckBox_disableRepeat() {
\r
267 if (jCheckBox_disableRepeat == null) {
\r
268 jCheckBox_disableRepeat = new JCheckBox();
\r
270 return(jCheckBox_disableRepeat);
\r
274 private JLabel getJLabel_showLatestOnly(String s) {
\r
275 if (jLabel_showLatestOnly == null) {
\r
276 jLabel_showLatestOnly = new JLabel(s);
\r
278 return(jLabel_showLatestOnly);
\r
280 private JCheckBox getJCheckBox_showLatestOnly() {
\r
281 if (jCheckBox_showLatestOnly == null) {
\r
282 jCheckBox_showLatestOnly = new JCheckBox();
\r
284 return(jCheckBox_showLatestOnly);
\r
288 private JButton getJButton_label(String s) {
\r
289 if (jButton_label == null) {
\r
290 jButton_label = new JButton();
\r
291 jButton_label.setText(s);
\r
293 jButton_label.addActionListener(new ActionListener() {
\r
295 public void actionPerformed(ActionEvent e) {
\r
296 if ( addToTraceKeyList() ) {
\r
303 return(jButton_label);
\r
306 private boolean addToTraceKeyList() {
\r
307 if (jTextField_title.getText().equals("")) {
\r
312 for (TraceKey k : xKeys.getTraceKeys()) {
\r
313 if ( k != xKey && k.getLabel().equals(getNewLabel()) ) {
\r
314 JOptionPane.showConfirmDialog(this, "既に登録されています:"+getNewLabel(), "警告", JOptionPane.CLOSED_OPTION); // キーワード検索の追加ではダイアログで修正できるので止めない
\r
319 if ( xKey == null ) {
\r
320 // 新規登録の場合はエントリがないので作成する
\r
321 xKey = new TraceKey();
\r
325 xKey.setLabel(getNewLabel());
\r
326 xKey.setCenter(jTextField_channel.getText());
\r
327 xKey.setTitlePop(TraceProgram.replacePop(jTextField_title.getText()));
\r
328 xKey.setSearchStrKeys(TraceProgram.splitKeys(xKey.getTitlePop()));
\r
329 xKey.setFazzyThreshold(jSlider_fazzyThreshold.getValue());
\r
330 xKey.setOkiniiri((String) jComboBox_okiniiri.getSelectedItem());
\r
331 xKey.setDisableRepeat(jCheckBox_disableRepeat.isSelected());
\r
332 xKey.setShowLatestOnly(jCheckBox_showLatestOnly.isSelected());
\r
334 reg = xKeys.save();
\r
340 private JButton getJButton_cancel(String s) {
\r
341 if (jButton_cancel == null) {
\r
342 jButton_cancel = new JButton();
\r
343 jButton_cancel.setText(s);
\r
345 jButton_cancel.addActionListener(new ActionListener() {
\r
348 public void actionPerformed(ActionEvent e) {
\r
353 return jButton_cancel;
\r
358 public VWTraceKeyDialog(int x, int y) {
\r
366 clean_okiniiri_items();
\r
367 for (String okini : TVProgram.OKINIIRI) {
\r
368 add_okiniiri_item(okini);
\r
372 this.setModal(true);
\r
373 this.setContentPane(getJPanel());
\r
374 // タイトルバーの高さも考慮する必要がある
\r
375 Dimension d = getJPanel().getPreferredSize();
\r
380 d.width+(this.getInsets().left+this.getInsets().right),
\r
381 d.height+(this.getInsets().top+this.getInsets().bottom));
\r
382 this.setResizable(false);
\r
384 this.setTitle("番組追跡の設定");
\r