Her bir sekme için farklı renklere sahip Nimbus Look ve Feel kullanarak bir JTabbedPane oluşturmak istiyorum. Renkleri değiştirmenin birden çok yolunu buldum, ancak anlayabildiğim kadarıyla, bu teknikler belirli bir duruma sahip tüm sekmeler için (aynı renkte olmak üzere TabbedPane:TabbedPaneTab[Enabled].backgroundPainter
ile tüm sekmelerin değiştirilmesi gibi) global olarak geçerlidir.JTabbedPane Nimbus'ta her sekme için farklı renklere sahip
İki yararlı linkler I (soruma oldukça cevabı yakın ama değil) bulduk: Aşağıda
Override Swing Nimbus L&F primary color per component instance
Set the Background Color for JTabbedPane
Ben başarmak istiyorum ne mockup resimdir.* edit - üzgünüm demo program kaynak kodunu dahil unuttum. (Bu renklendirme oluşturmak ama aksi uygun sekme bölmesinde ile yeni bir pencere açmaktadır değildir.):
public class TabbedPaneExample extends JFrame {
public static void main(String args[]) {
try {
for(javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.
getInstalledLookAndFeels()) {
if("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
}
catch(Exception ex) {
ex.printStackTrace();
}
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new TabbedPaneExample().setVisible(true);
}
});
}
public TabbedPaneExample(){
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
JTabbedPane pane = new JTabbedPane();
pane.addTab("Blue", new JLabel("Blue tab"));
pane.addTab("Red", new JLabel("Red tab"));
pane.addTab("Yellow", new JLabel("Yellow tab"));
this.add(pane);
pack();
}
}
* Düzenleme - aşağıdaki Zilk cevabı gelince - işe görünmüyor. BasicTabbedPaneUI
'u genişletmek, Nimbus'a özgü oluşturma işleminin kaybolmasına neden olur. Nimbus renderini korumak için, SynthTabbedPaneUI
'un uzatılması gerekiyor. Ancak, SynthTabbedPaneUI
, paintTabBackground
'u çağırmaz; bunun yerine, hem korumalı bir yöntem hem de aşırı yüklenmiş özel bir yardımcı yöntem olan paintTabArea
'u çağırır. Özel mantık yönteminde tüm mantık gibi görünüyor. Kendi özel kodumda kendi kodumda SynthTabbedPaneUI
özel örnek değişkenleri ve SynthContext
özel kod paketini kullanıyorum, bu paintTabArea
tarafından kullanılıyor.
Unutma: İşte benim kodları
P.S. neden olduğunu. 'BasicTabbedPaneUI' öğesini genişletmek, Nimbus'a özgü oluşturma işleminin kaybolmasına neden olur. Nimbus renderini korumak için 'SynthTabbedPaneUI' genişletilmeli. Ancak, 'SynthTabbedPaneUI', paintTabBackground işlevini çağırmaz, bunun yerine korumalı bir yöntem ve özel bir yardımcı yöntem olan paintTabArea işlevini çağırır. Tüm mantık özel yöntemde ortaya çıkar ve özel örnek değişkenler nedeniyle bunu yeniden oluşturamıyorum. Cevabımı daha fazla bilgi ile güncelleyeceğim. –
Neden sadece Nimbus için buna ihtiyacın olduğunu anlamıyorum. Ve aslında "Nimbus rendering'i kaybetme/tutma" hakkında ne düşünüyorsunuz? Kodlarım, modelinize uygun şekilde çalışıyor – ziLk
Uygulamalarımız Nimbus L & F'yi kullanıyor. 'BasicTabbedPaneUI' genişletirken, 'JTabbedPane' Metal L & F'nin görünümünü alır (ve artık Nimbus L & F'ye sahip değildir). Bu, 'JTabbedPane' uygulamasındaki yerinde görünmüyor. İşte, normal Nimbus 'JTabbedPane'ı' BasicTabbedPaneUI' kullanarak özel 'JTabbedPane' ile yan yana gösteren bir görüntü. http://i.imgur.com/Lv2lmHK.png Köşeler, kenarlar, degradeler ve seçim vurgularının görünümü farklı görünür. Farklı sekme renklerini nasıl elde edeceğimi ve Nimbus L & F'yi nasıl tutacağımı anlayamıyorum. –