1

クラスを拡張して、最終的にカスタムボタンを作成しようとしています。私はいくつかの場所で、階層をできるだけ高く拡張するのが最善であると読んだので(より良いポリモーフィズムのために?)、拡張しようとしていますJComponent

import javax.swing.*;
import java.awt.*;

public class TestButton extends JComponent {
    private static final long serialVersionUID = 1L;
    
    
    public TestButton() {
        super();        
    }
    
}

そして、これを呼び出すコードは次のとおりです。

 b1 = new TestButton();     
 basePanel.add(b1,gbc);  // (gbc is GridBagConstraints object)

問題は、JComponent私のレイアウトに表示されないということです。クラスをとして拡張するとJButton、問題はありません。どうしたんだ?

アップデート:

参考までに、これは一種の初心者の概念的な質問です。私はここで明らかに熟練しているとは言えません。

これが説明する写真です。変更されたのはextends ______

何が起こっているのかは、底の黄色いブロックと同じ高さの紫色で塗りつぶされたブロックです。

何が起こっているのかは、背景のないデフォルトサイズのブロックです(黒はJFrameからのものです)。

ここに画像の説明を入力してください

4

5 に答える 5

4

サブクラスとそのサブクラスの主な違いの1つはJComponent、後者にはUIデリゲートがありますが、JComponentないことです。setBackground()「色は、コンポーネントが不透明な場合にのみ使用され、JComponentまたはComponentUI実装のサブクラスによってのみ使用される」ことに注意してください。その結果、「paintComponent()このプロパティを尊重するにはオーバーライドする必要があります」。

于 2011-07-24T03:53:16.030 に答える
3

本来あるべき場所に何が見えると思いますJComponentか?を拡張するJButtonと、すべてのグラフィックが表示されますが、何も含まれていない空のコンポーネントが作成されます。コンポーネントに何かを入れてみてください(JLabelまたは同様のものなど)

于 2011-07-24T03:09:18.723 に答える
3

JButtonの機能が必要な場合は、拡張する必要がありJButtonます。そうでなければ、誰もが拡張Objectしてすべてを期待することができます。

于 2011-07-24T03:10:59.347 に答える
2

これは空白のコンポーネント(基本的にはテンプレート)です。プロパティはありません。paintComponentメソッドをオーバーライドして独自のグラフィカル要素を追加してから、updateメソッドをオーバーライドして論理要素を追加する必要があります。

于 2011-07-24T03:36:05.400 に答える
0

JButtonをそのまま使用します。

 JButton b1 = new JButton("Enter JButton text here");     
 basePanel.add(b1,gbc); 

または、特定のプロパティを変更して独自の設定に合わせてカスタマイズする場合は、JButtonクラスを拡張します。

public class TestButton extends JButton {
    private static final long serialVersionUID = 1L;


    public TestButton(String buttonText) 
    {
        super(buttonText);        
    }

}
于 2016-05-16T16:59:33.247 に答える