各タブの色が異なるNimbusルックアンドフィールを使用してJTabbedPaneを作成したいとします。色を変更するには複数の方法がありますが、これらの手法は特定の状態のすべてのタブにグローバルに適用されます(TabbedPane:TabbedPaneTab[Enabled].backgroundPainter
ですべてのタブを同じ色に変更するなど)NimbusのJTabbedPaneタブごとに色が異なる
2つの有用なSO私は(近いが私の質問に答えなく、かなり)を発見したリンク:以下
Override Swing Nimbus L&F primary color per component instance
Set the Background Color for JTabbedPane
私が達成したいもののモックアップ画像です。
*編集 - 申し訳ありませんが、デモプログラムのソースコードを含めるのを忘れていました。 (これは、着色を作成するが、そうでない場合には適切なタブウィンドウで新しいウィンドウを起動しません。):
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();
}
}
*編集 - 以下zilkの答えに関しては - 動作するように表示されません。 BasicTabbedPaneUI
を拡張すると、Nimbus固有のレンダリングが失われます。ニンバスレンダリングを維持するには、SynthTabbedPaneUI
を拡張する必要があります。ただし、SynthTabbedPaneUI
はpaintTabBackground
を呼び出さず、代わりにpaintTabArea
を呼び出します。これは保護されたメソッドとオーバーロードされたプライベートヘルパーメソッドの両方です。プライベートヘルパーメソッドではすべてのロジックが発生するようです。プライベートインスタンス変数がSynthTabbedPaneUI
で、パッケージプライベートコードがSynthContext
であり、paintTabArea
で使用されているため、自分のコードでそのプライベートメソッドを再現できません。
を忘れないでください。 'BasicTabbedPaneUI'を拡張すると、Nimbus固有のレンダリングが失われます。ニンバスレンダリングを維持するために、 'SynthTabbedPaneUI'を拡張する必要があります。しかし、 'SynthTabbedPaneUI'は' paintTabBackground'を呼び出すのではなく、 'paintTabArea'を呼び出します。これはprotectedメソッドとprivateヘルパーメソッドです。プライベートメソッドではすべてのロジックが発生するように見えますが、私はプライベートインスタンス変数のため再現できません。私はより多くの情報で私の答えを更新します。 –
Nimbusだけが必要な理由は分かりません。そして、実際には、「ニンバスレンダリングを失う/維持する」ということはどういう意味ですか? 私のコードはモックアップとして正しく動作します – ziLk
私たちのアプリケーションはNimbus L&Fを使用しています。 'BasicTabbedPaneUI'を拡張すると、' JTabbedPane'はMetal L&Fの外観を取ります(そしてNimbus L&Fはもうありません)。これにより、アプリケーションでJTabbedPaneの外観が変わってしまいます。ここでは、 'BasicTabbedPaneUI'を使ってカスタム' JTabbedPane'を使って通常のNimbus 'JTabbedPane'を並べて表示するイメージを示します。 http://i.imgur.com/Lv2lmHK.pngコーナー、罫線、グラデーション、および選択ハイライトの外観がどのように異なって表示されるかに注意してください。私はどのように異なるタブの色を達成し、NimbusのL&Fを維持するかを理解することはできません。 –