Swing/ParticularyNonEditableSpinner のバックアップの現在との差分(No.4)
- category: swing folder: ParticularyNonEditableSpinner title: JSpinnerのテキストフィールド内に選択不可の文字を追加する tags: [JSpinner, Border] author: aterai pubdate: 2010-01-04T15:04:02+09:00 description: JSpinnerのテキストフィールド内に選択や編集ができない文字列を追加します。 image:
概要
概要
JSpinner
のテキストフィールド内に選択や編集ができない文字列を追加します。
Screenshot
Advertisement
サンプルコード
サンプルコード
class StringBorder implements Border {
private final JComponent parent;
private final Insets insets;
private final Rectangle rect;
private final String str;
#spanadd
#spanend
public StringBorder(JComponent parent, String str) {
this.parent = parent;
this.str = str;
FontRenderContext frc = new FontRenderContext(null, true, true);
rect = parent.getFont().getStringBounds(str, frc).getBounds();
insets = new Insets(0,0,0,rect.width);
insets = new Insets(0, 0, 0, rect.width);
}
#spanadd
#spanend
@Override public Insets getBorderInsets(Component c) {
return insets;
}
#spanadd
#spanend
@Override public boolean isBorderOpaque() {
return false;
}
#spanadd
#spanend
@Override public void paintBorder(
Component c, Graphics g, int x, int y, int width, int height) {
Graphics2D g2 = (Graphics2D) g;
float tx = x + width - rect.width;
float ty = y - rect.y + (height - rect.height)/2;
//g2.setPaint(Color.RED);
float ty = y - rect.y + (height - rect.height) / 2;
// g2.setPaint(Color.RED);
g2.drawString(str, tx, ty);
}
}
View in GitHub: Java, Kotlin解説
- 上:
JSpinner.NumberEditor
+DecimalFormat
解説
-
JSpinner.NumberEditor
+DecimalFormat
JSpinner spinner1 = new JSpinner(new SpinnerNumberModel(0, 0, 1, 0.01));
JSpinner.NumberEditor editor1 = new JSpinner.NumberEditor(spinner1, "0%");
spinner1.setEditor(editor1);
- 下:
JSpinner
+StringBorder
-
JSpinner
のエディタに余白を設定し、そこに文字列を描画しています。
-
-
JSpinner
+StringBorder
-
JSpinner
のエディタに設定した余白内に文字列を描画JSpinner spinner2 = new JSpinner(new SpinnerNumberModel(0, 0, 100, 1)); JSpinner.NumberEditor editor2 = new JSpinner.NumberEditor(spinner2); spinner2.setEditor(editor2); editor2.setOpaque(true); editor2.setBackground(Color.WHITE); #spandel //Border b = new StringBorder(editor2, "percent"); #spanend #spanadd // Border b = new StringBorder(editor2, "percent"); #spanend Border b = new StringBorder(editor2, "%"); Border c = editor2.getBorder(); #spandel editor2.setBorder((c==null)?b:BorderFactory.createCompoundBorder(c,b)); #spanend #spanadd editor2.setBorder((c == null) ? b : BorderFactory.createCompoundBorder(c, b)); #spanend
-
- -
以下のように、Component Border ≪ Java Tips Weblogを利用して、
JLabel
を余白に描画する方法もあります。
- 以下のように
JLabel
を余白に描画する方法もある- Component Border ≪ Java Tips Weblog
JLabel label = new JLabel("%"); label.setBorder(BorderFactory.createEmptyBorder()); label.setOpaque(true); label.setBackground(Color.WHITE); ComponentBorder cb = new ComponentBorder(label); cb.setGap(0); cb.install(editor2);
- Component Border ≪ Java Tips Weblog