2011-03-05 39 views
5

JFormattedTextField yapıcısına bir biçim iletebileceğinizi biliyorum, ancak biçimlendiriciyi çalışma zamanında nasıl değiştirirsiniz? Örneğin, tamsayı değerlerine göre biçimlendirilmesi gereken bir alanım var, ama belirli bir birleşik giriş kutusunun değeri değiştirildiğinde, şimdi alanın yüzdürme değerleri alması gerekiyordu.Çalışma zamanında JFormattedTextField biçimini nasıl değiştirebilirim?

cevap

6

Nesnenizde setFormatterFactory(JFormattedTextField.AbstractFormatterFactory) öğesini çağırabilirsiniz.

Bu şekilde kullanabilirsiniz:

// Define the number factory. 
NumberFormat nf = NumberFormat.getIntegerInstance(); // Specify specific format here. 
NumberFormatter nff = new NumberFormatter(nf); 
DefaultFormatterFactory factory = new DefaultFormatterFactory(nff); 

// Define the decimal factory. 
DecimalFormat df = new DecimalFormat(); // And here.. 
NumberFormatter dnff = new NumberFormatter(df); 
DefaultFormatterFactory factory2 = new DefaultFormatterFactory(dnff); 

// Then you set which factory to use. 
JFormattedTextField field = new JFormattedTextField(); 
field.setFormatterFactory(factory); 
//field.setFormatterFactory(factory2);   

etkinlik oluştuğunda Dolayısıyla, sadece fabrika ayarlayın.

DefaultFormatterFactory yapıcısının birçok biçimlendirici alabileceğini unutmayın; varsayılan bir, odaklanmadığı zaman bir ekran biçimi, odağa sahip olduğunda bir düzenleme biçimi ve alanın boş bir değere sahip olması için boş bir format.

+0

Bunu önermeden önce bir JFormattedTextField örneğinde setFormatter'ı doğrudan aramayı denediniz mi? Bunun korunmuş bir yöntem olduğunu biliyorsun, değil mi? –

+0

setFormatter() öğesinin korunduğu gerçeği kaçırdı. –

+0

@netrom Formatter ve Format gerçekten aynı değil. Bir biçimlendirici fabrika ayarlayabilsem de, alanın biçimini nasıl değiştireceğini görmüyorum. Belki bir şey özlüyorum. Bir örneğiniz varsa, onu görmek isterim. Teşekkürler. – m0s

1

Bu example, varsayılan bir biçime varyasyon eklemek için InputVerifier kullanır. Date için tasarlanmıştır, ancak yaklaşımı Number'a uyarlayabilirsiniz.

İlgili konular