Неправильно рассчитан минимальный размер 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 пикселей (что является максимальным из минимального размера внутренних компонентов).

Кто-нибудь знает, как лучше обойти это? Большое спасибо,

0 ответов

Другие вопросы по тегам