0

デフォルトのJavaボタンの動作をオーバーライドし、ボタンにラベルを追加しようとしています。私はJavaGUIを初めて使用し、paintメソッドをオーバーライドすることで問題が解決すると思いましたが、それを実行してButton paintメソッドで追加のラベルを描画すると、問題なく表示されますが、アプリケーションでそのボタンをクリックするとラベルが消えます。

java.awt.Componentをオーバーライドする方法に関するチュートリアルをいくつか見つけようとしましたが、何も見つかりませんでした。ありがとう。

4

2 に答える 2

0

これは、awtでペイントがどのように機能するかを説明するページです。ただし、ボタンにラベルを追加するだけの場合は、サブクラス化を構成に変更することを検討する必要があります。それははるかに安全です。複合クラスはComponentを拡張し、独自のpaint-methodを定義できます。

class MyButton extends Component {
    private Button button;
    private Label label;

    public MyButton(String label, String buttonLabel) {
        label = new Label(label);
        button = new Button(buttonLabel);
    }

    public paint(Graphics g) {
        label.paint(g);
        button.paint(g);
    }

    ...
}
于 2009-08-31T05:40:22.057 に答える
0

たとえば、Buttonでは、ペイント動作の多くがピアクラス(たとえば、WindowsのWButton)によって行われるため、基本的なAWTコントロールの「paint」を実際にオーバーライドして正しく機能させることはできません。私は1.1.xでOS/2 JVM用のAWTコントロールの多くを作成しましたが、AWTで状況が劇的に変化しない限り、これが希望どおりに機能することは想像できません。

このような状況で実際にペイントを制御したい場合は、自分でロールするか、Swingボタンを使用して、「UIコンポーネント」(特にコントロールのペイントを担当するデリゲートオブジェクト-「の一部」の一部)を調べる必要があります。当時使用されていた「ルックアンドフィール」)。

基本的に、AWTコントロールは「ネイティブ」です。つまり、実際のWindowsボタンがあり、それにいくつかのJavaコードがラップされています。Swingコントロールは「純粋なJava」です。ただし、動作の多くと外観のほとんどすべてをルックアンドフィールパッケージのUIコントローラーに委任します。

于 2009-09-02T20:20:13.003 に答える