JTabbedPane — управление динамическими вкладками

#java #swing

#java #качать

Вопрос:

Я столкнулся с интересной вещью… Все идет нормально с нулевым объектом, когда я добавляю вкладки в конструктор как

 public class TPane extends JTabbedPane
{

public TPane(ImageIcon iconA,ImageIcon iconB)
{
  this.addTab("A",iconA,null);
  this.addTab("B",iconB,null);

}

}
  

Но когда я пытаюсь добавить вкладку в другой объект, например

 public class AClass
{

public void addNewTab(TPane tp, ImageIcon icon)
{

  tp.addTab("C",icon,null);//<-- contains null
}

}
  

… он не добавляет вкладку из-за null . Хорошо, если я изменю значение null на, допустим, новый код JLabel() работает нормально: S

Здесь оба предыдущих использования объекта…

 public class BClass extends JPanel
{


  private AClass a=new AClass();
  private TPane tp=new TPane();
  JButton addTabButton=new JButton("add tab");
  ImageIcon icon;

  public BClass(Image image)
{

icon=new ImageIcon(image);
...
this.add(tp);
...
addTabButton.addMouseListener(new MouseAdapter()
{

  public void mousePressed(MouseEvent e)
{

   a.addNewTab(tp,icon);

}

});

}
}
  

Итак, мой вопрос в том, как динамически добавлять нулевой объект в JTabbedPane?

Приветствуется любой полезный комментарий

Комментарии:

1. Почему вы хотите добавить null в JTabbedPane в первую очередь? Если вы не хотите ничего отображать на вкладке, просто добавьте пустую JPanel.

2. И зачем его расширять? Пожалуйста, предоставьте sscce , который показывает проблему, которую вы описываете.

3. Просто потому, что я хочу использовать только вкладки JTabbedPane. Как палитра вкладок

Ответ №1:

Я не уверен, что это проблема. Я успешно попробовал это, см. Пример ниже и его код (хотя это патологический пример):

введите описание изображения здесь

 package so;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;

public class JTabbedEx extends JTabbedPane {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                ImageIcon icon = new ImageIcon();
                JTabbedPane tabs = new JTabbedPane();
                tabs.addTab("Tab1", icon,null);
                new AnotherClass().addTab(tabs, icon);
                JFrame frame  = new JFrame();
                frame.add(tabs);
                frame.pack();
                frame.setVisible(true);
            }
        });         
    }
}

class AnotherClass {
    public void addTab(JTabbedPane tabs, ImageIcon icon) {
        tabs.addTab("Another tab", icon, null);
    }
}
  

Комментарии:

1. (ужасный значок null) скриншот 1

2. Спасибо 🙂 Но что может вызвать это? Я использую JDK 1.6

3. Пожалуйста, добавьте [SSCCE](sscce.org ). Это поможет нам обнаружить проблему.