JComponent sınıfını genişletdiğim özel bir Swing bileşenini oluşturmaya çalışıyorum.getGraphics() geçerli bir grafik örneğini ne zaman döndürür?
Bileşen gereksinimlerinin basitleştirilmesi amacıyla, bileşenimi her biri kendi yazı tipleriyle birkaç karakter dizisi oluşturmaya ihtiyaç duyuyor.
Bileşenimin, işlenen dizelerimin toplam genişliğine ve yüksekliğine tam olarak boyutlandırılmasına ihtiyacım var.
Bu boyutu belirlemek için, her dizenin boyutlarını hesaplamak için FontMetrics'i kullanıyorum. Bu bilgiye sahip olmak, bileşenimin hangi boyutta olacağını ve uygun şekilde yeniden boyutlandıracağını anlayabiliyorum.
Sorun şu ki, getGraphics() öğesine eriştiğimde her zaman boştur, bu yüzden FontMetrics örneğini alamıyorum. Bileşen boyutumun overboyalı paintComponent() yönteminden hesaplanmasını beklersem, çok geç (bileşen zaten bir boyuta sahip, değil mi?).
Bu belgede "Bu bileşen şu anda görüntülenemiyorsa, bu yöntem null değerini döndürecektir" der. Öyleyse, bileşenin ne zaman görüntülenmeye hazır olduğunu ve bileşenimi yeniden boyutlandırmak için bir Grafik nesnesinin ne zaman olduğunu bileceğim?
Çerçeve setVisible (true) çağrıldığında bileşeni oluşturmak için Swing çağırma sırası nedir?
Teşekkür
Güncelleme: Salı, Şubat 6, 2010 23:34
de yorumlarda feryat belirtildiği gibi, GridLayout hiç bir setXxxSize() saygı göstermiyor. İlgilenen herkes için, GridLayout, BoxLayout ve FlowLayout kullanarak, 200 genişlik 50 yüksekliğinde 5 sabit boyutlu bileşen (basit, azami ve tercihli olarak) alan basit bir çerçeve kullanarak sonuçlar yayınladım.
Test Sonuçları: (yorum belirtildiği gibi)
FlowLayout her zaman bileşenleri boyutu ne olursa olsun saygıGridLayout zaman genişliği ve yüksekliği boyunca boyutlandırılır. PAGE_AXIS ve Y_AXIS yaklaşık yarım büyüklüklerine (104) unsurlarının genişliği küçüldü ama yüksekliğini çekinmez
BoxLayout gelince....
LINE_AXIS ve X_AXIS sıfır gibiydi ama genişliğini dokunmadı ne bileşenlerin yüksekliği küçüldü.
Yazı tipinizi oluştururken görüyor musunuz? GetFont() öğesini denediğimde, font boştur. Bir JComponent'in varsayılan bir fontu olmadığı varsayılıyor mu? – Jeach
Yazı tipi açıkça ayarlanmamış bir Bileşen, üst öğesinin yazı tipini kullanır. Ebeveyniniz yoksa, yazı tipiniz yok. Kendi yazı tipinizi kurucunuza açıkça koymadan daha iyi olursunuz. –
Teşekkürler Jonathan! Yazı tipini ayarlamak, yapmaya başladığım şey. Bileşeni bu şekilde şimdi doğru şekilde işleyebilirim, ancak bazı nedenlerden dolayı bu bileşen boyutlarıma boyut atmayı reddediyor. Izgara düzeni olan bir çerçeve oluşturursam (0 satır, 1 sütun) ve bileşenlerimden 10'u eklerseniz, çerçevenin tam ekranını oluşturun. Her öğe, çok daha küçük olmamasına rağmen, ekranın yüksekliğinin 1/10'unu alır. Min, max, tercih edilen setSize() öğesini ayarlıyorum ve yine de bir şekilde kendi beğenisine dönüşüyor! – Jeach