Установить видимость определенных вкладок в JTabbedPane

Как я могу установить некоторые из вкладок в JTabbedPane невидимый? Я пытался с помощью JTabbedPane#getTabComponentAt(index).setVisible(false);, но бросает NullPointerException, Я могу отключить вкладки, но не сделать их невидимыми.

SSCCE:

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTabbedPane;

public class Main {
    public static void main(String[] args) {
        JTabbedPane tabbedPane = new JTabbedPane();
        tabbedPane.setPreferredSize(new Dimension(400, 100));
        for (int i = 0; i < 7; i++)
            tabbedPane.add("tab " + i, new JLabel("content " + i));

        // this throws a NullPointerException
        tabbedPane.getTabComponentAt(1).setVisible(false);
        // this works
        tabbedPane.setEnabledAt(1, false);

        JFrame frame = new JFrame();
        frame.setContentPane(tabbedPane);
        frame.pack();
        frame.setVisible(true);
    }
}

Я не могу узнать, что я делаю не так.

1 ответ

Решение

См. Javadoc соответствующего установщика:

Устанавливает компонент, который отвечает за отображение заголовка для указанной вкладки. Нулевое значение означает, что JTabbedPane будет отображать заголовок и / или значок для указанной вкладки. Ненулевое значение означает, что компонент будет отображать заголовок, а JTabbedPane не будет отображать заголовок и / или значок.

Итак JTabbedPane#getTabComponentAt(index) метод возвращает Component используется для отображения вкладки, если вы ее установили, в противном случае она использует метку и / или значок.

Не уверен, что вы можете сделать вкладку невидимой, но, черт возьми, вы можете удалить их и вставить их. Это может быть приемлемым решением

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