Подравняване на икона вляво в JTabbedPane в Nimbus Look and Feel

Създавах приложение с JTabbedPane, използвайки вида и усещането на Nimbus

Използвах този код за поставяне на раздели:

pane.addTab("Welcome",new ImageIcon("resources\\1.png"),mainPanel,"Takes to the welcome page");

Искам иконата да се появи отляво и

екранна снимка на приложението


person Gagan93    schedule 05.11.2013    source източник
comment
И така... опита ли отговора ми? Беше ли полезно? Обърнете внимание, че това решение е независимо от L&F.   -  person dic19    schedule 09.11.2013
comment
да Не го приложих към приложението си, но опитах вашия код и разбрах концепцията. Хареса ми този с бутона за затваряне (подобно на раздела в google chrome и други приложения с раздели) и да, вашето решение е независимо от вида и усещането, защото го подравнявате в панел и след това го добавяте   -  person Gagan93    schedule 10.11.2013


Отговори (2)


Можете да зададете персонализиран компонент за изобразяване на заглавието на раздела чрез JTabbedPane.setTabComponentAt(int index, компонент компонент) метод:

Задава компонента, който отговаря за изобразяването на заглавието за посочения раздел. Нулева стойност означава, че JTabbedPane ще изобрази заглавието и/или иконата за посочения раздел. Ненулева стойност означава, че компонентът ще изобрази заглавието и JTabbedPane няма да изобрази заглавието и/или иконата.

Забележка: Компонентът не трябва да е такъв, който разработчикът вече е добавил към панела с раздели.

Например можете да направите това:

JLabel label = new JLabel("Tab1");
label.setHorizontalTextPosition(JLabel.TRAILING); // Set the text position regarding its icon
label.setIcon(UIManager.getIcon("OptionPane.informationIcon"));

JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.LEFT);
tabbedPane.addTab(null, new JPanel());
tabbedPane.setTabComponentAt(0, label); // Here set the custom tab component

Екранна снимка 1:

въведете описание на изображението тук


Забележка: като използвате тази функция, можете да зададете всеки Component по ваше желание. Например можете да направите JPanel с JButton, за да затворите раздела:

final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.LEFT);

ActionListener actionListener = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        JButton button = (JButton)e.getSource();
        for(int i = 0; i < tabbedPane.getTabCount(); i++) {
            if(SwingUtilities.isDescendingFrom(button, tabbedPane.getTabComponentAt(i))) {
                tabbedPane.remove(i);
                break;
            }
        }
    }
};

JLabel label = new JLabel("Tab1", UIManager.getIcon("OptionPane.informationIcon"), JLabel.RIGHT);        
JButton closeButton = new JButton("X");
closeButton.addActionListener(actionListener);

JPanel tabComponent = new JPanel(new BorderLayout());
tabComponent.add(label, BorderLayout.WEST);
tabComponent.add(closeButton, BorderLayout.EAST);

tabbedPane.addTab(null, new JPanel());
tabbedPane.setTabComponentAt(0, tabComponent); // Here set the custom tab component

Екранна снимка 2:

въведете описание на изображението тук


Актуализация

Може да искате да видите и тази тема: JTabbedPane: разположението на разделите е зададено на ЛЯВО, но иконите не са подравнени

person dic19    schedule 05.11.2013
comment
Компонентът Tab е ЦЕНТРИРАН (независимо как е конструиран JPanel). Знаете ли как да направите вътрешния панел (компонент на раздела) подравнен НАЛЯВО или НАДЯСНО, без да пренаписвате потребителския интерфейс? Най-добре, когато решението е безопасно за LAF. - person Zbigniew; 10.11.2013

Има по-просто решение, използващо HTML форматиране. Това е пример с използване на html код за форматиране на текст, но можете също да форматирате други елементи в раздела:

final String PRE_HTML = "<html><p style=\"text-align: left; width: 230px\">"; 
final String POST_HTML = "</p></html>"; 

tabbedpane.setTitleAt(0, PRE_HTML + "your title" + POST_HTML);
tabbedpane.setTitleAt(2, PRE_HTML + "your title 2" + POST_HTML);
person pedromateo    schedule 18.11.2015