Swing/IconTextField のバックアップの現在との差分(No.14)
TITLE:JTextField内にアイコンを追加
Posted by aterai at 2005-01-03
JTextField内にアイコンを追加
JTextFieldの内部にアイコンを表示します。- category: swing folder: IconTextField title: JTextField内にアイコンを追加 tags: [JTextField, ImageIcon, JLabel, Border] author: aterai pubdate: 2005-01-03T02:14:18+09:00 description: JTextFieldの内部に余白を生成し、そこにImageIconを設定したJLabelを配置します。 image:
概要
JTextField
の内部に余白を生成し、そこにImageIcon
を設定したJLabel
を配置します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
ImageIcon image = new ImageIcon(getClass().getResource("16x16.png"));
int w = image.getIconWidth();
int h = image.getIconHeight();
JTextField field = new JTextField("bbbbbbbbbb");
Insets m = field.getMargin();
#spandel
field.setMargin(new Insets(m.top, m.left+w, m.bottom, m.right));
#spanend
#spanadd
field.setMargin(new Insets(m.top, m.left + w, m.bottom, m.right));
#spanend
JLabel label = new JLabel(image);
#spandel
label.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
#spanend
#spanadd
label.setCursor(Cursor.getDefaultCursor());
#spanend
label.setBorder(null);
label.setBounds(m.left, m.top, w, h);
field.add(label);
解説
サンプルではsetMarginでJTextFieldの左に余白を作り、そこにJLabelを配置することでアイコン(画像)を表示しています。解説
サンプルではsetMargin
でJTextField
の左に余白を作り、そこにJLabel
を配置することでアイコン(画像)を表示しています。
JComboBoxにアイコンを追加のように、Borderを使っても同様のことができますが、JTextComponentを継承したコンポーネントでは、setMarginを使用するとカーソルの指定などが簡単にできるのでおすすめです。
- JComboBoxにアイコンを追加のように
Border
を使用する方法もあるが、JTextComponent
を継承するコンポーネントではsetMargin(...)
メソッドを使用するとカーソルの指定などが簡単に実現可能-
JLabel
の代わりにJButton
などのコンポーネントを配置することも可能
-
-
JComboBox
のEditor
を取得してMargin
を指定しても反映されない - JTextComponent#setMargin(...) (Java Platform SE 8)
ただし、デフォルト以外の境界が設定されている場合は、
Border
オブジェクトが適切なマージン空白を作成します(それ以外の場合、このプロパティーは事実上無視される)。
#spanend
#spandel
JTextField field = (JTextField) combo02.getEditor().getEditorComponent();
#spanend
#spandel
JTextFieldの右端にJLabelを置く場合は、以下のようにSpringLayoutを使用する方法があります。
- JButtonなどの高さを変更せずに幅を指定
-
JTextField
の右端にJLabel
を置く場合は、以下のようにSpringLayout
を使用する方法もある- JButtonなどの高さを変更せずに幅を指定
final JLabel label2 = new JLabel(image); #spandel label2.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); #spanend #spanadd label2.setCursor(Cursor.getDefaultCursor()); #spanend label2.setBorder(BorderFactory.createEmptyBorder()); JTextField field2 = new JTextField("ccccccccccccccccccccccccccc") { @Override public void updateUI() { super.updateUI(); removeAll(); SpringLayout l = new SpringLayout(); setLayout(l); Spring fw = l.getConstraint(SpringLayout.WIDTH, this); Spring fh = l.getConstraint(SpringLayout.HEIGHT, this); SpringLayout.Constraints c = l.getConstraints(label2); c.setConstraint(SpringLayout.WEST, fw); c.setConstraint(SpringLayout.SOUTH, fh); add(label2); } }; m = field2.getMargin(); #spandel field2.setMargin(new Insets(m.top+2,m.left,m.bottom,m.right+w)); #spanend #spanadd field2.setMargin(new Insets(m.top + 2, m.left, m.bottom, m.right + w)); #spanend
- JButtonなどの高さを変更せずに幅を指定
参考リンク
- Swing (Archive) - Add a clickable icon to the left corner of a JTextField
- JTextFieldのMarginを設定する
- JComboBoxにアイコンを追加
参考リンク
- Swing (Archive) - Add a clickable icon to the left corner of a JTextField
- java - JTextField margin doesnt work with border - Stack Overflow
- JTextFieldのMarginを設定する
- JComboBoxにアイコンを追加