Я пытался изменить цвет фона вкладки в JTabbedPane.
Я прочитал онлайн на java-документации, а также на форумах, что они должны быть непрозрачными и иметь значение false и использовать tabpane.setBackgroundAt(index, color)
для изменения фона. Я не могу заставить его работать, хотя. Моя вкладка состоит из JPanel (установите opaque в false) с JLabel (который будет именем файла) и JButton (X, чтобы закрыть вкладку). Для метки, кнопки и панели установлено непрозрачное значение false, но независимо от того, когда я пытаюсь установить цвет фона, он просто остается цветом по умолчанию.
Это мой код для моей вкладки, с которой я работаю:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
public class TextEdit extends JTabbedPane {
public TextEdit() {
// On startup, display a blank tabbed pane
AddTab("Untitled");
}
protected void AddTab(String fileName) {
/* This will be the panel that displays the
* textarea
*/
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(0,1));
/* Textarea where the user will be able
* to type content into
*/
JTextArea ta = new JTextArea();
ta.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
/* Scrollpane that allows us to scroll
* if content in the text area gets too
* large
*
*/
JScrollPane sp = new JScrollPane(ta);
/* Line numbering
* In the future I will turn this on and off
* based on user preferences. This line will
* work to disable line numbering:
* sp.setRowHeaderView(null);
*/
TextLineNumber tln = new TextLineNumber(ta);
sp.setRowHeaderView(tln);
/*
* Add scrollpane to the panel
*/
panel.add(sp);
/* Now we configure the tab panel
* that displays the filename with an 'X'
* that will enable us to close the file (pane)
*/
JPanel tabPanel = new JPanel();
tabPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 2));
tabPanel.setOpaque(false);
// Label for the filename
JLabel label = new JLabel(fileName);
label.setBorder(new EmptyBorder(0,0,0,0));
// Button for the close button
JButton button = new JButton("X");
button.setBorder(new EmptyBorder(0,0,0,0));
button.setBorderPainted(false);
button.setOpaque(false);
button.setContentAreaFilled(false);
// On hover, change the color that way we know it's a button
button.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent e) {
button.setForeground(Color.RED);
}
public void mouseExited(java.awt.event.MouseEvent e) {
button.setForeground(Color.BLACK);
}
});
tabPanel.add(label);
tabPanel.add(button);
panel.setPreferredSize(new Dimension(1000, 500));
this.addTab(fileName, panel);
int index = this.getSelectedIndex();
this.setTabComponentAt(index, tabPanel);
this.setBackgroundAt(index, Color.GREEN);
}
}
Есть предложения? Я знаю, что индекс правильный, потому что он работает, когда я setTabComponentAt(index,tabPanel)
. Я думал, что это могло вызвать ошибки, но это не так.
UPDATE:
Итак, я создал вторую вкладку и заметил, что цвет фона меняется, если вкладка не активна. Я просто не мог видеть это с одной вкладкой. Есть ли способ изменить цвет активной вкладки? Моя цель состоит в том, чтобы цвет активной вкладки отличался от цвета неактивных вкладок.