2010-06-11 12 views
18

Çeşitli nedenlerden dolayı bir düğme gibi davranmak istediğim bir JButton var ama bir JLabel gibi görünüyorsun. Kaputun altında bir JLabel olması gerekmiyor, sadece yükseltilmiş düğme kenarının görünmesini istemiyorum.JLabel'e benzemek için bir JButton çizin (ya da en azından düğme kenarı olmadan?)

JButtons'un "düğme görünümünü" kapatmanın, ancak tüm düğme işlevlerini korumanın kolay bir yolu var mı?

Görüntüleme amacıyla jlabel'e atanan bir tür alt sınıf hiperbutonu oluşturabilirim, ancak gerçekten button.lookLikeAButton(false) satırında bir şey olduğunu umuyorum.

+2

Doğrudan bir JLabel kullanıp "OnClickEvents" işlemek için kullanamazsınız? –

+0

Evet, yeni başlayanlar için, bir JButton olarak geçebileceğim bir şeye ihtiyacım var. Ayrıca, sadece ClickEvent'lere ihtiyacım yok, aslında tüm "düğme" düğmesine ihtiyacım var - eylemler, silahlandırma, vb. –

cevap

24

aşağıdakileri yapmak isteyeceksiniz:

 setFocusPainted(false); 
     setMargin(new Insets(0, 0, 0, 0)); 
     setContentAreaFilled(false); 
     setBorderPainted(false); 
     setOpaque(false); 

Sen aslında odağı boyamak istiyorum (Windows görünüm üzerinde mesela noktalı çizgi, sınır ve his) eğer setFocusPainted(false) dışlamak isteyebilir.

"Yalnızca simge" düğmesini istediğim durumlarda yukarıdaki kodu kullandım.

+1

Mükemmel! Bu tam olarak aradığım şeyi yaptı. Teşekkürler! –

+0

Bunları ekledim ve daha sonra JLabel gibi görünüyordu ve imleç bir ele dönüşecek ve kullanıcı tıklanabilir olduğunu bilecek: 'setBorder (new EmptyBorder (0,0,0,0)); setCursor (Cursor.getPredefinedCursor (Cursor.HAND_CURSOR)); ' – hepcat72

+0

Alternatif olarak, kullanıcının aynı zamanda tıklanabilir olduğunu bilmesi için simge değişikliğine (ör. gölgelendirme) veya arka plan rengi değişikliğine de sahip olabilirsiniz. – Avrom

2

Arka plan rengini saydam ve bir EmptyBorder örneğine ayarlayın.

E.g.

JButton button = new JButton(); 
    button.setBackground(null); 
    button.setOpaque(false); 
    button.setBorder(new EmptyBorder()); 

metin yine yukarı hareket ve eğer düğmesini ve düğmesi hala tutarak tıklayarak "silahlı" ve düğme alanının dışına fareyi hareket ettirerek "silahsız" olabildiğince aşağı.

Bu davranışı istemezseniz, muhtemelen bir düğme kullanmak istemezsiniz ve bunun yerine gerçek bir etiket kullanabilirsiniz.

-1

Bir fare dinleyicisini JLabel'e eklemek gerçekten daha kolay olabilir mi? MousePressed ve mouseReleased'ta renkleri ayarlayabilir ve hareket işleminizi mouseClicked'de yapabilir misiniz?

+2

Bir fare dinleyicisinden çok daha fazla düğme var. Bir eyleme nasıl bağlanır? Silahlı/basılı/serbest bırakılan nedir? Yalancılıktan ne haber? Bir düğmenin bir düğme gibi davranması, bir düğmenin etiket gibi görünmesinden çok daha karmaşıktır, bu nedenle piksel amputasyonuna gidin, daha az ağrılı olacaktır. – shemnon

+0

@shemnon: tam olarak. –

1
button.setBorderPainted(false); 
button.setContentAreaFilled(false); // ? 
0
setContentAreaFilled(false); 
setBorderPainted(false); 
setOpaque(false); 

Bu üç satır hile yapar.