Неправильно рассчитан минимальный размер JTabbedPane
Я нашел ошибку в Java, и я хотел бы знать, как лучше всего ее обойти.
При создании JTabbedPane с левым выравниванием (вкладки слева) и при добавлении значков на вкладках минимальный размер компонента является неправильным.
Вот простой способ воспроизвести:
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
public class MinSizeComponent {
// +--------------------------------
// | constructor
// +--------------------------------
// +--------------------------------
// | methods
// +--------------------------------
public void createAndShowGUI() {
System.out.println("createAndShowGUI()");
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("Selection");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// +-----------------------------------------+
// | Gathering |
// +-----------------------------------------+
JPanel panel1 = new JPanel();
panel1.setMinimumSize(new Dimension(100, 99));
panel1.setPreferredSize(new Dimension(150, 99));
JPanel panel2 = new JPanel();
panel2.setMinimumSize(new Dimension(200, 99));
panel2.setPreferredSize(new Dimension(250, 99));
JPanel panel3 = new JPanel();
panel3.setMinimumSize(new Dimension(50, 99));
panel3.setPreferredSize(new Dimension(250, 99));
JPanel panel4 = new JPanel();
panel4.setMinimumSize(new Dimension(150, 99));
panel4.setPreferredSize(new Dimension(250, 99));
//WITH TOP ARRANGEMENT THERE IS NO PROBLEM
//JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
//WITH LEFT ARRANGEMENT THE BUG APPEARS
JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.LEFT);
//WITHOUT ADDING ICON IN THE TABS, THE MIN SIZE OF THE PANEL IS CORRECT: 200
/*
tabbedPane.addTab("PANEL 1", null, panel1, "tip1");
tabbedPane.addTab("PANEL 2", null, panel2, "tip2");
tabbedPane.addTab("PANEL 3", null, panel3, "tip3");
tabbedPane.addTab("PANEL 4", null, panel4, "tip4");
*/
//WITH ICONS IN THE TABS, THE MIN SIZE OF THE PANEL IS INCORRECT: ~285
//SHOULD BE 200 AS WELL!
tabbedPane.addTab("PANEL 1", new ImageIcon("Y:/src/resources/icons/IconUser_32x32.png"), panel1, "tip1");
tabbedPane.addTab("PANEL 2", new ImageIcon("Y:/src/resources/icons/IconUser_32x32.png"), panel2, "tip2");
tabbedPane.addTab("PANEL 3", new ImageIcon("Y:/src/resources/icons/IconUser_32x32.png"), panel3, "tip3");
tabbedPane.addTab("PANEL 4", new ImageIcon("Y:/src/resources/icons/IconUser_32x32.png"), panel4, "tip4");
JPanel rightPanel = new JPanel();
rightPanel.add(new JLabel("label right panel"));
JSplitPane splitPaneHorizontal = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, tabbedPane, rightPanel);
JPanel core = new JPanel(new BorderLayout());
core.add(splitPaneHorizontal, BorderLayout.CENTER);
core.setPreferredSize(new Dimension(500, 500));
//Display the window.
frame.getContentPane().add(core);
frame.pack();
frame.setVisible(true);
}
// +-----------------------------
// | MAIN
// +-----------------------------
public static void main(String[] args) {
MinSizeComponent toto = new MinSizeComponent();
toto.createAndShowGUI();
}
}
Просто выполните, переместите разделенную панель слева на максимум. Вы можете видеть, что размер содержимого JTabbedPane составляет приблизительно 285 пикселей. Уберите значки во вкладках: размер становится правильным: 200 пикселей (что является максимальным из минимального размера внутренних компонентов).
Кто-нибудь знает, как лучше обойти это? Большое спасибо,