Как изменить цвет вкладки при выборе? и его граница? в этом случае вкладка 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
для меня, работа над этим решением, я просто установил свойство 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/
Комментарий к CodeyX1 ответ: для меня невыбранное состояние uimanager работает с этими значениями (без слова "Tab" в середине):
UIManager.put("TabbedPane.unselectedForeground", Color.xxx)
UIManager.put("TabbedPane.selectedBackground", Color.xxx)
Пожалуйста, проверьте следующий метод из java docs для JTabbedPane
http://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html#eg
void setBackgroundAt (int, цвет)
Попробуй это:
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);
}
Первая область, в которой вы запрашиваете помощь с вашей программой, находится в блоке "за". Я попытаюсь объяснить это так, как вы поймете.
Первые две строки определяют цвет фона по умолчанию и цвет переднего плана для каждой неактивной вкладки. Вы можете изменить их на цвет вашего предпочтения.
Третья строка добавляет вкладку со следующими атрибутами:
В четвертой строке используется цвет фона по умолчанию
В последней строке применяется цвет переднего плана по умолчанию. ПРИМЕЧАНИЕ. Эти атрибуты не могут быть изменены с помощью 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)));
}
В этой части кода выполните следующие действия:
Переопределите пользовательский интерфейс, используя этот блок кода ниже
panel.setUI(new BasicTabbedPaneUI() {//place the code from step 2 here }
Введите эти свойства этого раздела:
highlight = Color.lightGray; lightHighlight = Color.white; shadow = Color.gray; darkShadow = Color.darkGray; focus = Color.black;
Как и в первом фрагменте, вы также изменяете эти атрибуты. Вот небольшой совет: на каждой вкладке есть маленькая пунктирная рамка вокруг метки табуляции, это отмечает фокус. Если вы хотите скрыть этот маркер, просто установите его цвет в соответствии с цветом активной вкладки, которая теперь имеет фокус.
Используйте 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 в свой ответ, чтобы я мог видеть, с чем вы столкнулись.
Благодарю.