изменить цвет активной вкладки в JTabbedPane

1

Как изменить цвет вкладки при выборе? и его граница? в этом случае вкладка Arbitros которая является синей, как я могу это изменить? Я использую JTabbedPane внутри JFrame я нашел это, но он не работает UIManager.put("TabbedPane.selected", Color.white); Что я делаю не так?

public VentanaPrincipal_vista() {

    super("Ventana Principal");

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setSize(1000, 500);
    this.setResizable(false);
    this.setUndecorated(true);
    this.setBackground(Color.BLUE);
    // add tabbedPane and tabs .

    tabs = new JTabbedPane();
    tabs.setBackground(new Color(83, 83, 83));
    tabs.setForeground(new Color(255, 255, 255));
    tabs.setBorder(null);
    UIManager.put("TabbedPane.selected", Color.white);
    this.add(tabs);

    menuBar = new BGMenuBar();
    menuBar.setColor(new Color(83, 83, 83));
    this.setJMenuBar(menuBar);

    menu = new JMenu("File");
    menu.setForeground(Color.white);
    menuBar.add(menu);

    close = new JMenuItem("Close");

    menu.add(close);
    close.addActionListener(this);
    close.setBackground(new Color(83, 83, 83));
    close.setForeground(new Color(255, 255, 255));

    op1 = new JMenuItem("option 1");
    op1.setBackground(new Color(83, 83, 83));
    op1.setForeground(new Color(255, 255, 255));

    menu.add(op1);

    this.setLocationRelativeTo(null);
    this.setVisible(true);

}// end of constructor

Изображение 174551

  • 0
    Может быть , как это ?
  • 0
    Как я уже сказал, я хочу знать, как изменить выбранную вкладку, а не фон всех вкладок в целом или определенным образом.
Показать ещё 1 комментарий
Теги:
swing
jtabbedpane

4 ответа

5

для меня, работа над этим решением, я просто установил свойство Uibmanager TabbedPane.selected color перед созданием объекта JTabbedPane.

 UIManager.put("TabbedPane.selected", Color.red);

      tabbedPane = new JTabbedPane();

Обратитесь к этой ссылке, я уверен, что она будет работать и для вас.

http://esus.com/changing-the-color-of-the-selected-tab-of-a-jtabbedpane/

0

Комментарий к CodeyX1 ответ: для меня невыбранное состояние uimanager работает с этими значениями (без слова "Tab" в середине):

UIManager.put("TabbedPane.unselectedForeground", Color.xxx)
UIManager.put("TabbedPane.selectedBackground", Color.xxx)
-1

Пожалуйста, проверьте следующий метод из java docs для JTabbedPane

http://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html#eg

void setBackgroundAt (int, цвет)

  • 0
    Как я уже сказал, я хочу знать, как изменить выбранную вкладку, а не фон всех вкладок в целом или определенным образом.
-2

Попробуй это:

import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.basic.BasicTabbedPaneUI;

public class TabHighlight extends JPanel
{
    private static final int MAX = 5;
    private JTabbedPane pane = new JTabbedPane();

    public TabHighlight()
    {
        for (int i = 0; i < MAX; i++)
        {
            Color color     = Color.black;   //Set default tab background to black
            pane.add("Tab " + String.valueOf(i), new TabContent(pane, i, color));

            pane.setBackgroundAt(i, color);
            pane.setForegroundAt(i, Color.white);
        }

        this.add(pane);
    }

    private static class TabContent extends JPanel
    {
        private TabContent(JTabbedPane panel, int i, Color color)
        {
            //Active and inactive tab coloring must be done
            //when rendering the CONTENT of the JTabbedPane object

            //Override these default settings to allow for active and inactive
            //tab background color changing

            panel.setUI(new BasicTabbedPaneUI()
            {
                @Override
                protected void installDefaults()
                {
                    super.installDefaults();

                    highlight       = Color.lightGray;
                    lightHighlight  = Color.white;

                    shadow          = Color.gray;
                    darkShadow      = Color.darkGray;

                    //Active tab background is white
                    //so set the focus color to white
                    //to hide the active tab focus
                    //marker seeing that we want the
                    //active tab backgound to be different
                    focus           = Color.black;
                }
            });

            //Set the active tab background to white
            UIManager.put("TabbedPane.selected", Color.gray);

            UIManager.put("TabbedPane.unselectedTabBackground", Color.black);

            //Remove borders
            UIManager.put("TabbedPane.contentBorderInsets", new Insets(0, 0, 0, 0));

            setOpaque(true);

            setBackground(color);
            setForeground(Color.white);

            add(new JLabel("Tab content " + String.valueOf(i)));
        }

        @Override
        public Dimension getPreferredSize()
        {
            return new Dimension(320, 240);
        }
    }

    public void display()
    {
        JFrame f = new JFrame("TabHighlight");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(this);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    //Use this function here to change the look and feel to Java default
    //If using a mac with OS X Yosemite or another recent Mac OS X release
    public static void initLookAndFeel()
    {
        try
        {
            UIManager.setLookAndFeel(
              UIManager.getCrossPlatformLookAndFeelClassName()
              );
        } 
        catch(UnsupportedLookAndFeelException e)
        {

        }
        catch(ClassNotFoundException e)
        {

        }
        catch(InstantiationException e)
        {

        }
        catch(IllegalAccessException e)
        {

        }
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                    initLookAndFeel();
                    new TabHighlight().display();
                }
            });
    }
}

Давайте рассмотрим этот фрагмент кода, который добавляет 5 вкладок запуска программы:

public TabHighlight()
{
    for (int i = 0; i < MAX; i++)
    {
       Color color     = Color.black;   //Set default tab background to black
       Color color2    = Color.white;   //Set default tab foreground to white

       pane.add("Tab " + String.valueOf(i), new TabContent(pane, i, color));

       pane.setBackgroundAt(i, color);
       pane.setForegroundAt(i, Color.white);
    }

    this.add(pane);
}

Первая область, в которой вы запрашиваете помощь с вашей программой, находится в блоке "за". Я попытаюсь объяснить это так, как вы поймете.

Первые две строки определяют цвет фона по умолчанию и цвет переднего плана для каждой неактивной вкладки. Вы можете изменить их на цвет вашего предпочтения.

Третья строка добавляет вкладку со следующими атрибутами:

  1. Строка, определяющая текст, который будет отображаться на вкладке
  2. Номер табуляции, вам не нужно включать это, если вы не хотите
  3. Создает второй фрагмент кода, который я получу после этого

В четвертой строке используется цвет фона по умолчанию

В последней строке применяется цвет переднего плана по умолчанию. ПРИМЕЧАНИЕ. Эти атрибуты не могут быть изменены с помощью UIManager. Я попробовал несколько альтернативных подходов, но не увенчался успехом. Дарн, мне жаль, что этого не было.

Теперь рассмотрим этот фрагмент кода, который определяет внешний вид активных и неактивных вкладок:

    private TabContent(JTabbedPane panel, int i, Color color)
    {
        //Active and inactive tab coloring must be done
        //when rendering the CONTENT of the JTabbedPane object

        //Override these default settings to allow for active and inactive
        //tab background color changing

        panel.setUI(new BasicTabbedPaneUI()
        {
            @Override
            protected void installDefaults()
            {
                super.installDefaults();

                highlight       = Color.lightGray;
                lightHighlight  = Color.white;

                shadow          = Color.gray;
                darkShadow      = Color.darkGray;

                //Active tab background is white
                //so set the focus color to white
                //to hide the active tab focus
                //marker seeing that we want the
                //active tab backgound to be different
                focus           = Color.black;
            }
        });

        //Set the active tab background to white
        UIManager.put("TabbedPane.selected", Color.gray);

        //Set the inactive tab background to black
        UIManager.put("TabbedPane.unselectedTabBackground", Color.black);

        //Remove borders
        UIManager.put("TabbedPane.contentBorderInsets"
                      , new Insets(0, 0, 0, 0));

        setOpaque(true);

        setBackground(color);
        setForeground(Color.white);

        add(new JLabel("Tab content " + String.valueOf(i)));
    }

В этой части кода выполните следующие действия:

  1. Переопределите пользовательский интерфейс, используя этот блок кода ниже

    panel.setUI(new BasicTabbedPaneUI() {//place the code from step 2 here }

  2. Введите эти свойства этого раздела:

    highlight = Color.lightGray; lightHighlight = Color.white; shadow = Color.gray; darkShadow = Color.darkGray; focus = Color.black;

    Как и в первом фрагменте, вы также изменяете эти атрибуты. Вот небольшой совет: на каждой вкладке есть маленькая пунктирная рамка вокруг метки табуляции, это отмечает фокус. Если вы хотите скрыть этот маркер, просто установите его цвет в соответствии с цветом активной вкладки, которая теперь имеет фокус.

  3. Используйте UIManager для изменения следующих атрибутов: UIManager.put("TabbedPane.selected", Color.gray); UIManager.put("TabbedPane.unselectedTabBackground", Color.black); UIManager.put("TabbedPane.selected", Color.gray); UIManager.put("TabbedPane.unselectedTabBackground", Color.black);

    Это позволит вам изменять активные и неактивные фоны вкладки во время выполнения программы.

    Вы использовали UIManager который является наилучшим способом достижения того, что вы пытались
    делать. Используя этот бит кода, вы можете внести изменения, которые вы ищете, но у вас есть шаг 2, прежде чем какие-либо из этих изменений смогут вступить в силу. UIManager.put("TabbedPane.selectedForeground", Color.xxx) и UIManager.put("TabbedPane.unselectedTabForeground", Color.xxx) не меняют цвет переднего плана, цвет переднего плана остается прежним. UIManager.put("TabbedPane.selected", Color.xxx) изменит цвет фона активной вкладки, а UIManager.put("TabbedPane.unselectedTabBackground") изменит цвет фона неактивной вкладки.

Скопируйте и вставьте эти два фрагмента кода в свой файл и измените их по мере необходимости.

Я бы рекомендовал вам скопировать весь исходный код вверху и вставить его в компилятор, а затем запустить его первым. Таким образом, вы сможете увидеть, что делает эта программа, и когда вы вернетесь к исходному коду, с которым работаете, вы будете знать, где разместить эти фрагменты кода.

Надеюсь это поможет.

Если у вас возникли проблемы с этим, отправьте сообщение SSCCE в свой ответ, чтобы я мог видеть, с чем вы столкнулись.

Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню