質問: new JLabel("こんばんは"); add(jl2); } } ``` 上のプログラムで MainPanelがあってスペースキーを押すとMainPanelを取り除いてBasePanelを追加する (「おはよう」表示から「こんばんは」表示に変える) ということをしたいです。 コメントアウトしてる /*MaijPanel削除する処理 BasePanel追加する処理*/ この部分に記述したらいいと思うのですが何を書いたらいいのでしょうか? addやremoveを使っても動かなかったのでよろしくお願いします。
回答: > > addやremoveを使っても動かなかったのでよろしくお願いします。 > > > 質問者さんが具体的にどういうことをやって上手く行かなかったかが分かると、 説明しやすくなります。 次回からは試したことも書いていただけるとありがたいです。 `getParent()`で自分の親を取得し、それに対して追加・削除をします。 最後に、コンポーネントツリーが変更されたので、すべて描画しなおすために `SwingUtilities.updateComponentTreeUI()`を呼びます。 ``` if (ke.getKeyCode() == KeyEvent.VK_SPACE) { Container parent = getParent(); parent.remove(this); // MainPanel自身を削除 parent.add(new BasePanel()); SwingUtilities.updateComponentTreeUI(parent); } ``` それと、これは必須ではありませんが、 コンポーネントだけ使う場合は、`paintComponent`は不要ですし、 `requestFocusInWindow()`は、`Part01`の`init()`に書いたほうが良いように思います。 ``` // Part01のinit()の最後に追加 mp.requestFocusInWindow(); ```