Swing/IconTextField のバックアップの現在との差分(No.2)
2021-05-21 (金) 03:22:02
概要
JTextField
の内部に余白を生成し、そこにImageIcon
を設定したJLabel
を配置します。
Screenshot
Advertisement
サンプルコード
解説
サンプルではsetMargin
でJTextField
の左に余白を作り、そこにJLabel
を配置することでアイコン(画像)を表示しています。
JTextField field = (JTextField) combo02.getEditor().getEditorComponent();
- JComboBoxにアイコンを追加のように
Border
を使用する方法もあるが、JTextComponent
を継承するコンポーネントではsetMargin(...)
メソッドを使用するとカーソルの指定などが簡単に実現可能-
JLabel
の代わりにJButton
などのコンポーネントを配置することも可能
-
-
JComboBox
のEditor
を取得してMargin
を指定しても反映されない - JTextComponent#setMargin(...) (Java Platform SE 8)
ただし、デフォルト以外の境界が設定されている場合は、
Border
オブジェクトが適切なマージン空白を作成します(それ以外の場合、このプロパティーは事実上無視される)。
- Java Forums - Add a clickable icon to the left corner of a JTextField
- -
-
JTextField
の右端にJLabel
を置く場合は、以下のようにSpringLayout
を使用する方法もある- JButtonなどの高さを変更せずに幅を指定
#spanend #spanadd final JLabel label2 = new JLabel(image); #spanend #spanadd label2.setCursor(Cursor.getDefaultCursor()); #spanend #spanadd label2.setBorder(BorderFactory.createEmptyBorder()); #spanend #spanadd JTextField field2 = new JTextField("ccccccccccccccccccccccccccc") { #spanend @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); } #spanadd }; #spanend #spanadd m = field2.getMargin(); #spanend #spanadd field2.setMargin(new Insets(m.top + 2, m.left, m.bottom, m.right + w)); #spanend #spanadd
- JButtonなどの高さを変更せずに幅を指定
参考リンク
- 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にアイコンを追加