質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.03%

パネルが表示されない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,487

daichanman123

score 30

コード
public class Part01 extends JApplet{

    int AppletW = 1000;        //アプレット幅
    int AppletH = 800;        //アプレット高さ


    /**
     * 初期メソッド
     */
    public void init(){
        setSize(AppletW, AppletH);

        BasePanel basePanel = new BasePanel(AppletW, AppletH);
        getContentPane().add(basePanel);

        basePanel.requestFocusInWindow();                //basePanelのキー入力有効化
    }

}
コード
public class BasePanel extends JPanel{

    int PanelW;            //パネルの幅
    int PanelH;            //パネルの高さ

    JPanel openingPanel;


    /**
     * コンストラクタ
     */
    public BasePanel(int PanelW, int PanelH){
        this.PanelW = PanelW;
        this.PanelH = PanelH;

        setLayout(null);
        setBounds(0, 0, PanelW, PanelH);

        openingPanel = MyLibrary.createPanel(PanelW, PanelH, Color.GREEN, true);
        add(openingPanel);

        JLabel jl1 = MyLibrary.createLabel("こんにちは", 250, 200, 500, 100,
                                                Color.RED, Color.WHITE, true, 44,
                                                    500, 100, Color.BLUE, 8);
        openingPanel.add(jl1);

        JLabel jl2 = MyLibrary.createLabel("こんばんは", 300, 500, 400, 100,
                                                Color.WHITE, null, false, 20,
                                                    400, 100, null, 0);
        openingPanel.add(jl2);
    }



    /**
     * キー入力処理
     */
    @Override
    public void processKeyEvent(KeyEvent ke){
        if(ke.getID() == KeyEvent.KEY_PRESSED){                //何かキーが押された場合
            if(ke.getKeyCode() == KeyEvent.VK_SPACE){            //押されたキーがSPACEの場合

                System.out.println("スペース押された");

                remove(openingPanel);
                JPanel backgroundPanel = MyLibrary.createPanel(PanelW, PanelH, Color.BLACK, true);
                add(backgroundPanel);
            }
        }
    }


}
コード
public class MyLibrary{


    /**
     * パネル作成
     */
    public static JPanel createPanel(int PanelW, int PanelH, Color c, boolean opaque){
        JPanel jp = new JPanel();

        jp.setBackground(c);                //背景色設定
        jp.setLayout(null);                    //レイアウト手動設定
        jp.setOpaque(opaque);                //不透明化設定
        jp.setBounds(0, 0, PanelW, PanelH);    //位置・サイズ設定

        return jp;
    }



    /**
     * ラベル作成
     */
    public static JLabel createLabel(String str, int x, int y, int w, int h,
                                        Color strColor, Color backColor, boolean opaque, int fontSize,
                                        int FrameW, int FrameH, Color FrameColor, int FrameSize){
        JLabel jl = new JLabel();

        jl.setText(str);                                                //文字設定
        jl.setBounds(x, y, w, h);                                        //位置・範囲設定
        jl.setForeground(strColor);                                        //文字色設定
        jl.setBackground(backColor);                                    //範囲背景設定
        jl.setOpaque(opaque);                                            //不透明化設定
        jl.setFont(new Font(Font.MONOSPACED, Font.BOLD, fontSize));    //フォント設定
        jl.setPreferredSize(new Dimension(FrameW,FrameH));                //枠領域設定
        jl.setBorder(new LineBorder(FrameColor, FrameSize, true));        //枠色・大きさ・角設定
        jl.setHorizontalAlignment(JLabel.CENTER);                        //枠内水平位置設定
        jl.setVerticalAlignment(JLabel.CENTER);                        //枠内垂直位置設定

        return jl;
    }


}

上のプログラムですが
はじめベースパネルにオープニングパネルが貼り付けられていて、
スペースキーを押すとオープニングパネルが取り除かれバックグランドパネルがベースパネルに貼り付けられるようになっています。
実行してスペースキーを押すと”スペース押された”はコンソールに表示されるのですが、パネルがオープニングパネルのままでバックグランドパネルが表示されなかったのですが、表示の枠?アプレットの枠?をいじるとバックグランドパネルが表示されました。
一応はちゃんと動いてるみたいなのですが、いちいち枠をいじらないとちゃんと表示されないのはなぜなのでしょうか?
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • java-beginner

    2016/09/30 15:37

    MyLibraryのソースも貼り付けてください。

    キャンセル

  • daichanman123

    2016/09/30 16:23

    MyLibraryクラスも載せておきました。

    キャンセル

回答 1

checkベストアンサー

0

「public void processKeyEvent(KeyEvent ke)」のif文の最後に「repaint();」を追加してみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる