1

JPanel の JApplet に JButton があり、クリックすると何らかの処理が行われ、JPanel の内容が変更されてから再描画されます。ただし、ボタン自体を再描画しているようには見えず、JPanel も自己を再描画しています。ただし、JApplet 自体を再描画する必要があると思います。基本的に、ボタンの 1 つをクリックすると、ボタンが変更されますが、JLabels は表示されません。アプレットのサイズを変更するか、ブラウザでアプレットの側面がアプレットに触れるほど小さくすると、すべてがリセットされて見栄えが良くなります。ボタンのコードの 1 つを次に示します。

reset.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e)
            {
                //resets the vars
            questions = 0;
            wrong = 0;
            correct = 0;
            //clears the JPanel
            overallJP.removeAll();
            //adds new question, and buttons
            rand = generator.nextInt(10);
            JLabel tmp = new JLabel("Answer the Question: "+"\n"+qArr.get(rand).getQuestion());
            overallJP.setSize(new Dimension(500,700));
            overallJP.add(tmp);
            overallJP.add(buttonArea);
            overallJP.repaint();
            setVisible(true);
            repaint();
            }
        });

他のボタンも同じように見えます。一番下の repaint() に問題があると思います。この匿名関数内から JApplet の再描画を呼び出す方法はありますか? リセット ボタンは、アプレットの init() で宣言されています。さらに質問がある場合、またはさらにコードが必要な場合は、質問してください。

4

1 に答える 1

4

パネルからコンポーネントを削除しているため、再検証が必要になる場合があります。追加してみてください:validate();

編集:

Container.validate()は、コンテナーの再レイアウトをトリガーします。コンテナが変更されたときに呼び出される必要があります-コンテナが表示された後にコンポーネントが追加、削除されたなど。

于 2012-10-11T03:30:04.623 に答える