0

JApplet を拡張するクラス、メニューバー、および JPanel を拡張するクラスで構成されるアプレットを作成しています (したがって、アプレットにはメニューバーと JPanel が表示されます)。

このクラスでは、JPanel にいくつかのテキスト フィールドを追加および削除します。これはすべてうまくいきます。ここが難しいところです。最初にしか機能しません。JPanel にいくつかの新しいテキストフィールドを追加すると、JPanel に追加されて表示されますが、JFrame のメニューバーが機能しなくなります。

コードが広すぎるので、その一部のみを投稿します。

JPanel を JApplet に追加するコードは次のとおりです。

public class Simulator extends JApplet implements ItemListener, ActionListener {
    Container pane = getContentPane();
    canvas = new DrawCanvas();
    pane.add(canvas, BorderLayout.LINE_END);
}

JPanel のコードは次のとおりです。

class DrawCanvas extends JPanel {
    public void paintComponent(Graphics g) {
        if(textfield != null)
            remove(textfield);
        textfield = new JTextField();
        this.add(textfield);
    }
}

これは最初は機能しますが (何も削除されていない場合)、2 回目はメニューバーが機能しなくなります。this.add(textfield); を省略した場合 行、メニューバーは機能し続けます。

4

2 に答える 2

0

スレッドで問題が発生していると思います。ペイント中にJComponents を追加および削除すると、EDT が台無しになる可能性があります (最初にペイント メソッドを呼び出します)。

于 2011-05-24T09:34:21.133 に答える
0

私はかつて、ポップアップメニューが他のコンポーネントの後ろに描かれているという同様の問題を抱えていました。特定のサブメニューでstaticJPopupMenu.setDefaultLightWeightPopupEnabled(false);または theを呼び出してみてください。setLightWeightPopupEnabledこれにより、(すべての) ポップアップ メニュー (つまり、サブメニュー) が、ネイティブ ピアを持つ重量コンポーネントになります。

于 2011-05-24T09:50:57.287 に答える