JTextField内にアイコンを追加
Total: 10576, Today: 4, Yesterday: 2
Posted by aterai at 
Last-modified: 
Summary
JTextFieldの内部に余白を生成し、そこにImageIconを設定したJLabelを配置します。
Screenshot

Advertisement
Source Code Examples
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();
field.setMargin(new Insets(m.top, m.left + w, m.bottom, m.right));
JLabel label = new JLabel(image);
label.setCursor(Cursor.getDefaultCursor());
label.setBorder(null);
label.setBounds(m.left, m.top, w, h);
field.add(label);
View in GitHub: Java, KotlinDescription
サンプルではsetMarginでJTextFieldの左に余白を作り、そこにJLabelを配置することでアイコン(画像)を表示しています。
- JComboBoxにアイコンを追加のように
Borderを使用する方法もあるが、JTextComponentを継承するコンポーネントではsetMargin(...)メソッドを使用するとカーソルの指定などが簡単に実現可能JLabelの代わりにJButtonなどのコンポーネントを配置することも可能
 JComboBoxのEditorを取得してMarginを指定しても反映されない- JTextComponent#setMargin(...) (Java Platform SE 8)
ただし、デフォルト以外の境界が設定されている場合は、
Borderオブジェクトが適切なマージン空白を作成します(それ以外の場合、このプロパティーは事実上無視される)。 
JTextFieldの右端にJLabelを置く場合は、以下のようにSpringLayoutを使用する方法もある- JButtonなどの高さを変更せずに幅を指定
final JLabel label2 = new JLabel(image); label2.setCursor(Cursor.getDefaultCursor()); 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(); field2.setMargin(new Insets(m.top + 2, m.left, m.bottom, m.right + w)); 
- JButtonなどの高さを変更せずに幅を指定
 
Reference
- 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にアイコンを追加