JavaのSwingにて、JPanelの内容を継承クラスに書きたいがぬるぽが発生してしまう

実現したいこと

JPanelをアコーディオン風に展開 こちらのサイトを参考にして設計しています。

ラベルをクリックするとラベル下部のパネルの表示・非表示が切り替わる仕組みになっていて、書く内容を何パターンかに分けて3つほどの継承クラスを作成し、配列などで一気に作成できるようにしたいです。

java

1class Main {2 public static void main(String[] args){3 JFrame f = new JFrame();4 JPanel p = new JPanel();5 CheckBox_Accordion instance = new CheckBox_Accordion("mockTitle", "chk1", "chk2", "chk3");6 f.add(p);7 p.add(instance);8 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);9 f.setBounds(100, 100, 640, 400);10 f.setVisible(true);11 }12}13class CheckBox_Accordion extends Abstract_Accordion {14 List<String> list = new LinkedList<>();15 16 CheckBox_Accordion(String i_title, String... chkbox_title){17 super(i_title);18 Stream.of(chkbox_title).forEach(list::add);19 }20 21 JPanel makePanel(){22 JPanel panel = new JPanel();23 panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));24 list.stream().map(JCheckBox::new).forEach(panel::add);25 26 return panel;27 }28}29abstract class Abstract_Accordion extends JPanel {30 private JPanel panel = makePanel();31 32 Abstract_Accordion(String i_title){33 JLabel label = new JLabel(i_title);34 label.addMouseListener(/* 省略 */);35 36 add(label, BorderLayout.NORTH);37 add(panel, BorderLayout.CENTER);38 }39 40 abstract JPanel makePanel();41}

発生している問題・分からないこと

しかし継承先のmakePanel()メソッドでpanelの内容を書こうとすると実行順の影響でぬるぽが発生してしまいます。
今はぬるぽを回避するために継承クラスのコンストラクタ全てにmakePanel()を書かなくてはならず、面倒ですしコーディングミスも起きやすいですし何よりきれいじゃないと思います。

該当のソースコード

java

1Exception in thread "main" java.lang.NullPointerException2 at CheckBox_Accordion.makePanel(Main.java:33)3 at Abstract_Accordion.<init>(Main.java:40)4 at CheckBox_Accordion.<init>(Main.java:26)5 at Main.main(Main.java:13)6

試したこと・調べたこと

上記の詳細・結果

テンプレートパターンが最適かと思っているのですが上手く組み立てられていません。

補足

特になし

コメントを投稿

0 コメント