Выравнивание значка по левому краю в 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, Component component):

Устанавливает компонент, отвечающий за отрисовку заголовка указанной вкладки. Нулевое значение означает, что 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: размещение вкладок установлено в положение LEFT, но значки не выровнены

person dic19    schedule 05.11.2013
comment
Компонент вкладки ЦЕНТРИРОВАН (независимо от того, как построена 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