2012-03-18 3 views
2

私はJSpinnerを0x0000000から0xffffffffへの16進値を回転させたくありません。 abstractspinnerモデルを拡張しようとしましたが失敗しました。私のアプローチは正しいですし、そこは本当にここでヘックスJspinnerのヒント?私は正しいアプローチです

+1

これまでに試したことを示すことはできますか? –

+1

おそらくスピナーは、268,435,456の可能な値から選択する最良のコンポーネントではありません。ところで、7桁の(?)16進値が必要なのは何ですか? –

+0

高速モータの計数制限を設定するためのもので、4バイトの値ですff ff ff – cornercoder

答えて

7

を便利なことになる他のsolution.someヘルプは、私が0に変換取得され、10000のためにそれを行っているあなたに

import java.awt.BorderLayout; 
import java.text.ParseException; 

import javax.swing.JFormattedTextField; 
import javax.swing.JFrame; 
import javax.swing.JSpinner; 
import javax.swing.SpinnerNumberModel; 
import javax.swing.JFormattedTextField.AbstractFormatter; 
import javax.swing.text.DefaultFormatter; 
import javax.swing.text.DefaultFormatterFactory; 


public class HexSpinnerTest { 

    public static void main(String[] args) { 
    JFrame f = new JFrame(); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JSpinner sp = new JSpinner(new SpinnerNumberModel(0,0,10000,1)); 
    JSpinner.DefaultEditor editor = 
    (JSpinner.DefaultEditor)sp.getEditor(); 
    JFormattedTextField tf = editor.getTextField(); 
    tf.setFormatterFactory(new MyFormatterFactory()); 
    f.getContentPane().add(sp, BorderLayout.NORTH); 
    f.setSize(200,200); 
    f.setVisible(true); 
    } 

    private static class MyFormatterFactory extends DefaultFormatterFactory { 
     public AbstractFormatter getDefaultFormatter() { 
      return new HexFormatter(); 
     } 
    } 

    private static class HexFormatter extends DefaultFormatter { 
     public Object stringToValue(String text) throws ParseException { 
     try { 
      return Long.valueOf(text, 16); 
     } catch (NumberFormatException nfe) { 
      throw new ParseException(text,0); 
     } 
    } 

    public String valueToString(Object value) throws ParseException { 
      return Integer.toHexString( 
       ((Integer)value).intValue()).toUpperCase(); 
    } 
} 
} 

を助けるかもしれない一つの方法でありますHEX。

+1

「Long.valueOf(...)」と「Long.toHexString(...)」を使うのではなく、 Integerバリアント。 –

+0

@HovercraftFullOfEels、gr8おい、ありがとう、今編集中 –

+0

この関連[例](http://stackoverflow.com/a/13121724/230513)も参照してください。 – trashgod