上の図に示すように、JSpinner が 2 回表示されます。そこにあるべきではない点 (0,0) での最初の出現は、スピナー ボタンなしでは選択、編集、または使用できません。
ここで奇妙なのは、他のすべてのコンポーネントに問題がないことです。jspinnerのみ。私は Java 7 を使用しており、Netbeans で開発しています (GUI 開発者キットではありません)。これはJava 7のバグですか?そうでない場合、指定した領域でJSpinnerペイントを1回だけ行うにはどうすればよいですか?
問題を説明するコード:
ここに示すように、JPanel のサブクラスに追加しています。
public class MyCustomGUI extends JPanel {
private JSpinner entrySpinner;
public MyCustomGUI () {
super(null);
this.setDoubleBuffered(true);
entrySpinner = new JSpinner(new SpinnerNumberModel(0, 0, Integer.MAX_VALUE, 1));
add(entrySpinner);
....
私はそれに場所を与える方法を持っています:
public void resize() {
entrySpinner.setBounds((int) (this.getWidth() * .2), (int) (this.getHeight() * 0.38), (int) (this.getWidth() * 0.3), (int) (this.getHeight() * 0.1));
}
ここで paint メソッドをオーバーライドします。
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(
RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
.. draw shapes..
super.paintComponents(g);
super.validate();
Toolkit.getDefaultToolkit.sync();
g.dispose();
}