0

このエラーの取得:

スレッド「AWT-EventQueue-0」での例外 Project.reportpane.addComponent(reportpane.java:69) での java.lang.NullPointerException

rptinvestment tabbedPane をパネル tabinvestment に追加できません

public class reportpane extends 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);
}

}

4

2 に答える 2

2

レイアウトマネージャーによってオーバーライドされた絶対配置を使用してコンポーネントを追加しようとしています

JTabbedPane は独自のレイアウト ロジックを使用しており、実際に独自の UI クラスを作成しない限り、変更することはできません。

同様に、フレーム レイアウト マネージャーを BorderLayout に設定しました。これにより、設定されている位置の値がオーバーライドされます (以前はそうではありませんでした)。

于 2013-03-04T08:30:36.437 に答える
2

tabinvestment を初期化することはありません。インスタンス変数として宣言しますが、コンストラクターで初期化することはありません。ある時点で、 を呼び出す必要がありますJTabbedPane tabinvestment = new JTabbedPane()

于 2013-03-04T07:16:27.880 に答える