Java: Bazı ofsetlerle JSpinner show değerini nasıl yapabilirim

Uygulamamda bazı değerler dahili olarak 0 aralığındadır. Ancak kullanıcı bu aralığı 1'den itibaren görmelidir. Bu dengeleme malzemelerini sunuma taşımak uygun olacağını düşündüm. Bu durumda JSpinner bileşenidir. Öyleyse eğer bir ofset varsa (eğer tüm değerler buna sahip değil), çalışmacıda belirtebiliyordum. Ancak, JSpinner'ın getValue() veya böyle bir şey olması için getValue() kodunu geçersiz kılarsam (+1 yalnızca test içindir)

       public Object getValue() {
            Number value = (Number)super.getValue();
            Number newValue=value;
            if (value instanceof Double){
                newValue=value.doubleValue()+1;
            }
            else if (value instanceof Integer){
                newValue = value.intValue()+1;
            }
            return newValue;
        }

sonsuz döngü içine giriyor. Sanırım, burada bir sebepten dolayı durum değişikliği olayını tetikliyor. Tekrar getValue çağırır, daha fazla artırır, olayları, artışları vb. Tetikler. Bu nasıl çözülebilir? Teşekkürler

4

2 cevap

Programınızın veri modelini ve çeviricinin numara modelini karıştırmayın; onları ayrı tut. Doğru sunum aralığına sahip özel SpinnerNumberModel 'e devredin, 1 .. n . İstenen aralıkta değerler döndüren bir erişimci sağlayın, 0 .. n –1.

getValue() yerine tüm istemcilerin kullanması gereken getValue() - ofset yöntemini getAdjustedValue() yöntemiyle belirtin. ?

Evet. SpinnerModel , JSpinner görünümünü sunar. Uygulamanızın modeli farklı birimler kullanıyorsa, bazı dönüşümler gerçekleşmelidir. En mantıklı olan yere karar vermeniz gerekecek. Somut bir örnek olarak, bu model 'in ControlPanel , Hz 'de bir frekansı ayarlayan bir dönüşüme sahiptir. Uygulamanın Zamanlayıcısı , milisaniye cinsinden bir süre gerektirir.

4
katma
Yukarıda detaylandırdım.
katma yazar trashgod, kaynak
Yani, bir ofset varsa, JSpinner value + offset 'i SpinnerNumberModel ' e geçirir ve temelde getValue() - olan getAdjustedValue yöntemini sağlar. getValue yerine tüm istemcilerin kullanması gereken offset ? Seni doğru anladım mı?
katma yazar Boris Mikhaylov, kaynak
teşekkürler, beni doğru yolda buldunuz
katma yazar Boris Mikhaylov, kaynak
2
katma
@Boris Mikhaylov yaklaşık sonsuz döngüye girer. , o zaman bunu bazı aralıklara yerleştirebilirsiniz.
katma yazar mKorbel, kaynak
+1 Bu, önerildiği gibi SpinnerModel özel bir örneğidir
Bunu detaylandırır mısın? Nasıl yardımcı olduğunu göremiyorum
katma yazar Boris Mikhaylov, kaynak
ama bütün nokta değeri sadece bir kez arttırmaktır
katma yazar Boris Mikhaylov, kaynak