2009-08-30 2 views
0

デフォルトのJavaボタンの動作をオーバーライドし、ボタンにラベルを追加しようとしています。私は、Java GUIの初心者ですし、私の問題を解決する描画メソッドをオーバーライドすると思ったが、私はそれを行い、ボタンのペイント方法でそれは私のアプリケーションでそのボタンをクリックすると私のラベルが消えて、java.awt.Buttonのオーバーライド

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

答えて

0

ここには参考になるa page describing how painting works in awtがあります。ただし、ボタンに余分なラベルを追加するだけの場合は、サブクラス化をcompositionに変更することを検討する必要があります。はるかに安全です。コンポジットクラスはComponentを拡張し、それ自身のペイントメソッドを定義することができます。ボタンには、例えば、ペイント動作の多くは、ピアクラスによって行われますので、あなたが本当ににWButton(基本AWTコントロールの「ペイント」を無効にして、まだそれらが正しく動作することはできません

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); 
    } 

    ... 
} 
0

例えば、Windows)。私は1.1.xでOS/2 JVMのAWTコントロールの多くを書きましたが、AWTで状況が劇的に変わっていない限り、これが望むように動作するとは想像できません。

このような状況で実際にペイントを制御したい場合は、自分自身を回転させるか、スイングボタンを使用して「UIコンポーネント」(コントロールを他のものにペイントする担当のデリゲートオブジェクト - その時点で使用されている「ルックアンドフィール」の一部)。

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

+0

よく、それは私のためにうまく動作するので驚くでしょう=) –

+0

私は、あなたがすべての状況で望むように動作しないことを意味しました。たとえば、元のポスターの場合、ネイティブコントロールがWindowsのマウスボタンダウンイベントに応答してペイントしていて、プロセスのJava側で発生していることを完全に無視している可能性があります。 – M1EK

関連する問題