• R/O
  • SSH
  • HTTPS

phosphoresce: Commit


Commit MetaInfo

Revision558 (tree)
Time2015-02-26 23:32:39
Authorbbcry

Log Message

(empty log message)

Change Summary

Incremental Difference

--- develop/Javalib/Javalib6_Swing/trunk/source_test/org/phosphoresce/lib/swing/test/TestSwinglib.java (nonexistent)
+++ develop/Javalib/Javalib6_Swing/trunk/source_test/org/phosphoresce/lib/swing/test/TestSwinglib.java (revision 558)
@@ -0,0 +1,46 @@
1+package org.phosphoresce.lib.swing.test;
2+
3+import javax.swing.JFrame;
4+
5+import org.phosphoresce.lib.swing.JLabelField;
6+
7+/**
8+ * Swingコンポーネント拡張ライブラリテストウィンドウです。<br>
9+ * <p>
10+ * </p>
11+ *
12+ * @author Kitagawa<br>
13+ *
14+ *<!--
15+ * 更新日 更新者 更新内容
16+ * 2015/02/26 Kitagawa 新規作成
17+ *-->
18+ */
19+public class TestSwinglib extends JFrame {
20+
21+ /** ラベルフィールド */
22+ private JLabelField labelField1;
23+
24+ /**
25+ * コンストラクタ<br>
26+ */
27+ public TestSwinglib() {
28+ super();
29+ getContentPane().setLayout(null);
30+ getContentPane().add(getLabelField1());
31+ }
32+
33+ /**
34+ * ラベルフィールドを取得します。
35+ * @return ラベルフィールド
36+ */
37+ private JLabelField getLabelField1() {
38+ if (labelField1 == null) {
39+ labelField1 = new JLabelField();
40+ labelField1.setText("ラベルフィールド");
41+ labelField1.setCaption("ラベルフィールド");
42+ labelField1.setBounds(26, 10, 216, 34);
43+ }
44+ return labelField1;
45+ }
46+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--- develop/Javalib/Javalib6_Swing/trunk/source/org/phosphoresce/lib/swing/JLabelField.java (nonexistent)
+++ develop/Javalib/Javalib6_Swing/trunk/source/org/phosphoresce/lib/swing/JLabelField.java (revision 558)
@@ -0,0 +1,235 @@
1+package org.phosphoresce.lib.swing;
2+
3+import java.awt.Color;
4+import java.awt.Dimension;
5+import java.awt.Rectangle;
6+
7+import javax.accessibility.Accessible;
8+import javax.swing.JComponent;
9+import javax.swing.JLabel;
10+import javax.swing.JTextField;
11+import javax.swing.SwingConstants;
12+import javax.swing.border.CompoundBorder;
13+import javax.swing.border.EmptyBorder;
14+import javax.swing.border.MatteBorder;
15+import javax.swing.text.JTextComponent;
16+
17+/**
18+ * ラベル付きテキストフィールドです。<br>
19+ * <p>
20+ * </p>
21+ *
22+ * @author Kitagawa<br>
23+ *
24+ *<!--
25+ * 更新日 更新者 更新内容
26+ * 2007/09/01 Kitagawa 新規作成
27+ * 2015/02/26 Kitagawa 全面的にラップコンポーネントを作り直し
28+ *-->
29+ */
30+public class JLabelField extends JComponent implements SwingConstants, Accessible {
31+
32+ /** キャプションラベル */
33+ private JLabel captionLabel;
34+
35+ /** カスタムフィールド */
36+ private JTextComponent field;
37+
38+ /** ディフォルトフィールド */
39+ private JTextField defaultField;
40+
41+ /** キャプションラベルギャップ */
42+ private int labelGap;
43+
44+ /** キャプションラベル幅 */
45+ private Integer labelWidth;
46+
47+ /**
48+ * コンストラクタ<br>
49+ */
50+ public JLabelField() {
51+ super();
52+ setLayout(null);
53+ setBorder(new EmptyBorder(5, 5, 5, 5));
54+ add(getCaptionLabel());
55+ add(getDefaultField());
56+ setBounds(0, 0, 128, 32);
57+ setLabelWidth(null);
58+ setLabelGap(5);
59+ updateLayout();
60+ }
61+
62+ /**
63+ * このコンポーネントを移動し、サイズ変更します。<br>
64+ * 左上隅の新しい位置は x および y によって指定され、新しいサイズは width および height によって指定されます。<br>
65+ * @param x このコンポーネントの新しい x 座標
66+ * @param y このコンポーネントの新しい y 座標
67+ * @param width このコンポーネントの新しい width
68+ * @param height このコンポーネントの新しい height
69+ * @see java.awt.Component#setBounds(int, int, int, int)
70+ */
71+ public void setBounds(int x, int y, int width, int height) {
72+ super.setBounds(x, y, width, height);
73+ updateLayout();
74+ }
75+
76+ /**
77+ * 新しい境界の矩形 r に適合するようにこのコンポーネントを移動し、サイズ変更します。<br>
78+ * このコンポーネントの新しい位置は r.x および r.y によって指定され、新しいサイズは r.width および r.height によって指定されます。<br>
79+ * @param r このコンポーネントの新しい境界の矩形
80+ * @see java.awt.Component#setBounds(java.awt.Rectangle)
81+ */
82+ @Override
83+ public void setBounds(Rectangle r) {
84+ super.setBounds(r);
85+ updateLayout();
86+ }
87+
88+ /**
89+ * フィールドテキストを取得します。<br>
90+ * @return フィールドテキスト
91+ */
92+ public String getText() {
93+ return getField().getText();
94+ }
95+
96+ /**
97+ * フィールドテキストを設定します。<br>
98+ * @param text フィールドテキスト
99+ */
100+ public void setText(String text) {
101+ getField().setText(text);
102+ }
103+
104+ /**
105+ * レイアウトを更新します。<br>
106+ */
107+ private void updateLayout() {
108+ updateLayoutOfLabel();
109+ updateLayoutOfField();
110+ updatePreferredSize();
111+ }
112+
113+ /**
114+ * ラベル部レイアウトを更新します。<rb>
115+ */
116+ private void updateLayoutOfLabel() {
117+ int x = getInsets().left;
118+ int y = getInsets().top;
119+ int width = labelWidth != null ? labelWidth : captionLabel.getPreferredSize().width;
120+ int height = getPreferredSize().height - (getInsets().top + getInsets().bottom);
121+ getCaptionLabel().setBounds(x, y, width, height);
122+ }
123+
124+ /**
125+ * フィールド部レイアウトを更新します。<br>
126+ */
127+ private void updateLayoutOfField() {
128+ int x = getInsets().left + getCaptionLabel().getBounds().width + labelGap;
129+ int y = getInsets().top;
130+ int width = getPreferredSize().width - (getInsets().left + getInsets().right + getCaptionLabel().getBounds().width + labelGap);
131+ int height = getPreferredSize().height - (getInsets().top + getInsets().bottom);
132+ getField().setBounds(x, y, width, height);
133+ }
134+
135+ /**
136+ * コンポーネントサイズを更新します。<br>
137+ */
138+ private void updatePreferredSize() {
139+ Dimension dimension = super.getPreferredSize();
140+ dimension.width = getCaptionLabel().getPreferredSize().width + getField().getPreferredSize().width + getInsets().left + getInsets().right + labelGap;
141+ dimension.height = getCaptionLabel().getPreferredSize().height + getInsets().top + getInsets().bottom;
142+ }
143+
144+ /**
145+ * キャプションを設定します。
146+ * @param caption キャプション
147+ */
148+ public void setCaption(String caption) {
149+ getCaptionLabel().setText(caption);
150+ }
151+
152+ /**
153+ * キャプションラベルを取得します。
154+ * @return キャプションラベル
155+ */
156+ private JLabel getCaptionLabel() {
157+ if (captionLabel == null) {
158+ captionLabel = new JLabel("Caption");
159+ captionLabel.setBorder(new CompoundBorder(new MatteBorder(0, 3, 0, 0, (Color) new Color(0, 102, 204)), new EmptyBorder(0, 3, 0, 0)));
160+ captionLabel.setHorizontalAlignment(JLabel.LEFT);
161+ captionLabel.setVerticalAlignment(JLabel.CENTER);
162+ }
163+ return captionLabel;
164+ }
165+
166+ /**
167+ * カスタムフィールドを取得します。
168+ * @return カスタムフィールド
169+ */
170+ public JTextComponent getField() {
171+ if (field == null) {
172+ return getDefaultField();
173+ }
174+ return field;
175+ }
176+
177+ /**
178+ * カスタムフィールドを設定します。
179+ * @param field カスタムフィールド
180+ */
181+ public void setField(JTextComponent field) {
182+ if (getField().equals(field)) {
183+ return;
184+ }
185+ remove(getField());
186+ this.field = field;
187+ add(getField());
188+ updateLayout();
189+ }
190+
191+ /**
192+ * ディフォルトフィールドを取得します。
193+ * @return ディフォルトフィールド
194+ */
195+ private JTextField getDefaultField() {
196+ if (defaultField == null) {
197+ defaultField = new JTextField("Field");
198+ }
199+ return defaultField;
200+ }
201+
202+ /**
203+ * キャプションラベルギャップを設定します。
204+ * @param labelSpace キャプションラベルギャップ
205+ */
206+ public void setLabelGap(int labelSpace) {
207+ this.labelGap = labelSpace;
208+ updateLayout();
209+ }
210+
211+ /**
212+ * キャプションラベルギャップを取得します。
213+ * @return キャプションラベルギャップ
214+ */
215+ public int getLabelGap() {
216+ return labelGap;
217+ }
218+
219+ /**
220+ * キャプションラベル幅を取得します。
221+ * @return キャプションラベル幅
222+ */
223+ public Integer getLabelWidth() {
224+ return labelWidth;
225+ }
226+
227+ /**
228+ * キャプションラベル幅を設定します。
229+ * @param labelWidth キャプションラベル幅
230+ */
231+ public void setLabelWidth(Integer labelWidth) {
232+ this.labelWidth = labelWidth;
233+ updateLayout();
234+ }
235+}
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Show on old repository browser