OSDN Git Service

abdcde2f3252955e30075b57a3f5ed15b734de5f
[hayashilib/hayashi.git] / src / hayashi / yuu / tools / properties / PropertyItem.java
1 package hayashi.yuu.tools.properties;\r
2 \r
3 import hayashi.yuu.tools.logger.LoggerFactory;\r
4 import hayashi.yuu.tools.properties.Properties;\r
5 import java.awt.Dimension;\r
6 import java.awt.event.ActionEvent;\r
7 import java.awt.event.ActionListener;\r
8 import java.util.logging.Logger;\r
9 \r
10 import javax.swing.JComponent;\r
11 import javax.swing.JLabel;\r
12 import javax.swing.JPanel;\r
13 \r
14 /**\r
15  * プロパティ項目をGUIで操作する。\r
16  * @author hayashi\r
17  * @version 2010/02/07\r
18  * @since 2010/02/04\r
19  */\r
20 @SuppressWarnings("serial")\r
21 public abstract class PropertyItem extends JPanel implements ActionListener {\r
22         hayashi.yuu.tools.properties.Properties prop;\r
23         String propertyName;\r
24         JLabel label;\r
25         JComponent field;\r
26         String value;\r
27         Logger logger;\r
28         public static final int ITEM_WIDTH_1 = 160;\r
29         public static final int ITEM_WIDTH_2 = 240;\r
30     public static final int LINE_WIDTH = ITEM_WIDTH_1 + ITEM_WIDTH_2;\r
31     public static final int LINE_HEIGHT = 18;\r
32         \r
33     /**\r
34      * コンストラクタ\r
35      * @param prop              プロパティファイル\r
36      * @param name              ネーム\r
37      * @param title             タイトル\r
38      */\r
39         public PropertyItem(Properties prop, String name, String title) {\r
40                 super(null);\r
41                 logger = LoggerFactory.getInstance();\r
42                 this.propertyName = name;\r
43                 this.prop = prop;\r
44         }\r
45         \r
46         void createItem(String name, String title, String value, boolean editable) {\r
47                 setupLabel(title, value);\r
48                 setupField(name, value, editable);\r
49                 \r
50                 label.setBounds(0, 0, ITEM_WIDTH_1 - 6, LINE_HEIGHT);\r
51                 field.setBounds(ITEM_WIDTH_1, 0, ITEM_WIDTH_2, LINE_HEIGHT);\r
52                 setPreferredSize(new Dimension(ITEM_WIDTH_1, LINE_HEIGHT));\r
53         }\r
54         \r
55         JLabel setupLabel(String title, String value) {\r
56                 label = new JLabel(title, JLabel.RIGHT);\r
57                 add(label);\r
58                 return label;\r
59         }\r
60         \r
61         public String getValue() {\r
62                 return value;\r
63         }\r
64         \r
65         /**\r
66          * コーディング例:\r
67          * \r
68          *      void setupField(String name, String title, String value, boolean editable) {\r
69          *              this.value = value;\r
70          *              ((JTextField)field).setText(value);\r
71          *              field.setFont(new Font("MS UI Gothic", Font.PLAIN, 12));\r
72          *              if (!editable) {\r
73          *                      field.setEnabled(editable);\r
74          *              }\r
75          *              add(field);\r
76          *      }\r
77          */\r
78         abstract void setupField(String name, String value, boolean editable);\r
79 \r
80         /**\r
81          * [反映]ボタンがクリックされたときの処理\r
82          *      \r
83          *      public void actionPerformed(ActionEvent e) {\r
84          *              System.out.println("[反映] "+ label.getText() +" = "+ text.getText());\r
85          *              prop.setProperty(label.getText(), text.getText());\r
86          *      }\r
87          * @param e     イベント\r
88          */\r
89         public abstract void actionPerformed(ActionEvent e);\r
90 }\r