Добавление JTabbedPane к ошибке JTabbedPane

Получение этой ошибки:

Исключение в потоке "AWT-EventQueue-0" java.lang.NullPointerException в Project.reportpane.addComponent(reportpane.java:69)

Я не могу добавить вкладку rptinvestment tabbedPane на панель tabinvestment

панель отчетов открытого класса расширяет JPanel {

JTabbedPane rpt;
JPanel tabcashflow;
JPanel tabinvestment;
JPanel tabexchangerates;
JTabbedPane rptinvestment;
JPanel tabofficial;
JPanel tabdem;
JPanel tabcommodities;

public reportpane() {

    rpt = new JTabbedPane();
    tabcashflow = new JPanel();
    tabinvestment = new JPanel();
    tabexchangerates = new JPanel();

    tabofficial = new JPanel();
    tabdem = new JPanel();
    tabcommodities = new JPanel();


    rpt.add("Cashflow", tabcashflow);
    rpt.add("Investement", tabinvestment);
    rpt.add("Exchange rates", tabexchangerates);
    rpt.setBackground(new Color(255, 255, 255));
    rpt.setFont(new Font("sansserif", Font.PLAIN, 14));
    rpt.setTabPlacement(javax.swing.JTabbedPane.TOP);
    rpt.setBorder(BorderFactory.createEmptyBorder());
    rpt.setSize(750, 500);


    rptinvestment = new JTabbedPane();
    rptinvestment.add("Official", tabofficial);
    rptinvestment.add("DEM", tabdem);
    rptinvestment.add("Commodities", tabcommodities);
    rptinvestment.setBackground(new Color(255, 255, 255));
    rptinvestment.setFont(new Font("sansserif", Font.PLAIN, 14));
    rptinvestment.setTabPlacement(JTabbedPane.TOP);
    rptinvestment.setBorder(BorderFactory.createEmptyBorder());
    rptinvestment.setSize(750, 500);

    addComponent(tabinvestment, rptinvestment, 0, 0, 675, 570);
    addComponent(this, rpt, 10, 10, 675, 570);



    this.setLayout(new BorderLayout());
    this.setBackground(Color.WHITE);
    this.setBorder(null);
    this.revalidate();
    this.repaint();

}

public void addComponent(Container container, Component c, int x, int y, int width, int height) {
    c.setBounds(x, y, width, height);
    container.add(c);
}

}


person Muhsina M    schedule 04.03.2013    source источник
comment
Вы инициализируете свои панели, такие как tabinvestment, в своем коде, прежде чем добавлять или ссылаться на него? Потому что я не вижу, вы пропустили эту часть кода?   -  person Harry Joy    schedule 04.03.2013


Ответы (2)


Вы никогда не инициализируете tabinvestment. Вы объявляете ее как переменную экземпляра, но никогда не инициализируете ее в конструкторе. В какой-то момент вам нужно позвонить JTabbedPane tabinvestment = new JTabbedPane().

person drew moore    schedule 04.03.2013
comment
все еще не отображается так, как должно было быть, пожалуйста, посмотрите на это, я отредактировал код - person Muhsina M; 04.03.2013

Вы пытаетесь добавить компоненты, используя абсолютное позиционирование, которое было переопределено менеджером компоновки.

JTabbedPane использует свою собственную логику макета, и если вы действительно когда-либо не создадите свой собственный класс пользовательского интерфейса, его нельзя будет изменить.

Точно так же вы установили менеджер компоновки фреймов на BorderLayout, который переопределит любые значения позиционирования, которые могли быть установлены (ранее было иначе).

person MadProgrammer    schedule 04.03.2013
comment
так что я должен на самом деле сделать, пожалуйста, порекомендуйте - person Muhsina M; 04.03.2013
comment
Вопрос в том. Чего вы пытаетесь достичь - person MadProgrammer; 04.03.2013
comment
у меня есть основная панель JTabbed с вкладками денежных потоков, инвестиций и обменного курса, под панелью инвестиций у меня есть две дополнительные вкладки, в основном официальные, дем и товары - person Muhsina M; 04.03.2013