2

のタブの背景色を変更しようとしていますJTabbedPane。前景も試しJTabbedPane.setBackgroudAt(0, Color.GRAY)てみJTabbedPane.setBackgroud(Color.GRAY)ましたが、何も起こりません。タブ内のパネルの背景を変更しましたが、まだ何もありません。

ここに画像の説明を入力してください

編集1:UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");これが解決策に役立つかどうかを使用しています

編集2:例へのリンクhttps://www.dropbox.com/s/0krn9vikvkq46mz/JavaApplication4.rar

4

4 に答える 4

19

setBackgroundAt()次に示すように、を使用してタブの背景色を変更できます

タブ

setBackground()次に示すように、を使用してタブのコンテンツの背景色を変更できます。通常、タブのコンテンツでこれを行う必要があります。これは、囲んでJTabbedPaneいる背景色がコンテンツによって隠されているためです。

コンテンツ

それでも問題が解決しない場合は、質問を編集して、発生した問題を示すいずれかの例に基づいたsscceを含めてください。

補遺:メソッドを組み合わせることも可能です:

結合

import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;

public class JTabbedTest {

    private static JTabbedPane jtp;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                jtp = new JTabbedPane();
                jtp.setPreferredSize(new Dimension(320, 200));
                jtp.addTab("Reds", new ColorPanel(0, Color.RED));
                jtp.setBackgroundAt(0, Color.RED);
                jtp.addTab("Greens", new ColorPanel(1, Color.GREEN));
                jtp.setBackgroundAt(1, Color.GREEN);
                jtp.addTab("Blues", new ColorPanel(2, Color.BLUE));
                jtp.setBackgroundAt(2, Color.BLUE);

                f.add(jtp, BorderLayout.CENTER);
                f.pack();
                f.setVisible(true);
            }
        });
    }

    private static class ColorPanel extends JPanel implements ActionListener {

        private final Random rnd = new Random();
        private final Timer timer = new Timer(1000, this);
        private Color color;
        private Color original;
        private int mask;
        private JLabel label = new JLabel("Stackoverflow!");
        private int index;

        public ColorPanel(int index, Color color) {
            super(true);
            this.color = color;
            this.original = color;
            this.mask = color.getRGB();
            this.index = index;
            this.setBackground(color);
            label.setForeground(color);
            this.add(label);
            timer.start();
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            color = new Color(rnd.nextInt() & mask);
            this.setBackground(color);
            jtp.setBackgroundAt(index, original);
        }
    }
}
于 2012-07-04T19:03:51.400 に答える
5
  • のメソッドのほとんどはJTabbedPaneAPIで保護されており、Swingメソッドからはアクセスできません

  • これらのメソッドを探してCustom XxxTabbedPaneUIオーバーライドする必要があり、外部からアクセスできる可能性があります

  • 正しい方法は、カスタムルックアンドフィールのみを実装することです。それらの一部はオーバーライドします。JTabbedPane

  • カスタムXxxTabbedPaneUIの例

于 2012-07-04T18:42:37.083 に答える
3

JTabbedPaneのデフォルトのUIManger設定を変更して、希望どおりのルックアンドフィールを使用するか、失敗するかを検討する必要があります。

UIManager.put("TabbedPane.background", Color.GRAY);

後者を選択する場合は、GUIを作成する前に行う必要があります。

詳細については、このテーマに関するRob Camickの優れたブログ(UIManager Defaults )を参照してください。

編集:私は間違っていました。そのはず:

UIManager.put("TabbedPane.unselectedBackground", Color.GRAY);

ただし、これはすべてのルックアンドフィールで機能するとは限らないことに注意してください。

于 2012-07-04T18:38:59.007 に答える
-3

タブにまだ何も追加されていないことが問題になる可能性があります。

コンテンツパネルのコンテンツマネージャをに設定しBorderLayout、にを追加してJPanelみてくださいBorderLayout。そのパネルを中央に配置してから色付けします。

于 2012-07-04T18:35:36.100 に答える