JLabel как вкладка - PullRequest
       14

JLabel как вкладка

0 голосов
/ 10 ноября 2018

Я пытаюсь использовать JLabel в качестве вкладки для JTabbedPane, но я не знаю, как это сделать. Возможно ли это?

Если нет, то я пытаюсь сделать вкладки, которые выглядят так:

Win10Tabs:

https://i.stack.imgur.com/OxnPL.png

1 Ответ

0 голосов
/ 10 ноября 2018

как выровнять текст (не вкладки) по левому краю?

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

Другой вариант - определить предпочтительный размер каждой метки, которую вы используете в качестве компонента вкладки, а затем установить предпочтительный размер всех этих меток равной ширине. Это заставит выравнивание влево.

import javax.swing.*;
import java.awt.*;

public class TabbedPaneLeft extends JPanel
{
    private JTabbedPane tabbedPane;

    public TabbedPaneLeft()
    {
        ImageIcon icon = new ImageIcon( "copy16.gif" );

        tabbedPane = new JTabbedPane();
        tabbedPane.setTabPlacement(JTabbedPane.LEFT);
        add( tabbedPane );

        initTabComponent(icon, "Tab 1");
        initTabComponent(icon, "Tabbed Pane 2");
        initTabComponent(icon, "Tab 3");

        adjustTabComponentSize();
    }

    private void initTabComponent(Icon icon, String text)
    {
        JLabel label = new JLabel( text );
        label.setPreferredSize( new Dimension(300, 300) );

        tabbedPane.addTab(null, null, label);

        JLabel tabLabel = new JLabel( text );
        tabLabel.setIcon( icon );
        //tabLabel.setHorizontalAlignment(JLabel.LEFT); // doesn't work
        //tabLabel.setAlignmentX(0.0f); // doesn't work
        tabbedPane.setTabComponentAt(tabbedPane.getTabCount() - 1, tabLabel);
    }

    private void adjustTabComponentSize()
    {
        int width = 0;

        //  Find the width of the larget tab

        for (int i = 0; i < tabbedPane.getTabCount(); i++)
        {
            Dimension d = tabbedPane.getTabComponentAt(i).getPreferredSize();
            width = Math.max(width, d.width);
        }

        //  Set the width of all tabs to match the largest

        for (int i = 0; i < tabbedPane.getTabCount(); i++)
        {
            Component tabComponent = tabbedPane.getTabComponentAt(i);
            Dimension d = tabComponent.getPreferredSize();
            d.width = width;
            tabComponent.setPreferredSize( d );
        }
    }

    private static void createAndShowGUI()
    {
        JFrame frame = new JFrame("SSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new TabbedPaneLeft());
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args) throws Exception
    {
        java.awt.EventQueue.invokeLater( () -> createAndShowGUI() );
/*
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowGUI();
            }
        });
*/
    }

}
...