2

したがって、メイン クラスで JFrame と JPanel の両方を拡張する必要があります。どうすればいいですか?

例えば:

public class mainClass extends JFrame {
//code here
}

同じクラスの JPanel も拡張するにはどうすればよいですか?

前もって感謝します!

4

5 に答える 5

6

メインクラスでJFrameとJPanelを拡張するには?

質問してお答えします。

息子は同時に2人の父親を持つことができますか? いいえ、誰が本当の父親かはわかりませんが、DNA 検査をすれば誰が本当の父親かがわかります。

Java には DNA テストがありません。申し訳ありませんが、多重継承は許可されていません。

あなたの場合、クラスがJFrameとの両方から拡張された場合、JPanelこのクラス、パネル、またはフレームの動作はどうなりますか?

于 2013-07-23T00:07:59.430 に答える
3

Java は多重継承をサポートしていません。考えられる解決策には、メイン クラスに JPanel を拡張する内部クラスをコーディングし、次に JFrame を拡張する別の内部クラスをコーディングすることが含まれます。また、私が使用する一般的なアプローチであるため、それぞれのクラスを拡張する 2 つの別個の (非内部) クラスをコーディングすることもできます。

于 2013-07-22T23:45:35.210 に答える
2

したがって、メイン クラスで JFrame と JPanel の両方を拡張する必要があります。どうすればいいですか?

できません。Java は単純な継承のみをサポートします。

そして、私の意見では、具体的な継承は、「適切に」使用しないと危険です。オブジェクトの原則と契約 (Liskov Substitution 原則、Single Responsibility 原則) を破ることができ、保守が困難になる可能性があるためです。

JFrame本当の問題は、なぜ拡張する必要があるのか​​ということJPanelです。

別の手法を使用して、やりたいことを確実に達成できます。例えば、

構成。

public class MyClass{

private JPanel panel;
private JFrame frame;

}

たとえばpaintComponentJPanelで特定の動作をオーバーライドする必要がある場合は、実行できます(匿名クラス)

{
//in some part
panel = new JPanel(){

 @Override 
 public void paintComponent(Graphics gr){
     super.paintComponent(gr);
     //your code
 }

}

}

または、内部クラスを作成します

public class MyClass{

private class MyJPanel extends JPanel{

}

}
于 2013-07-23T00:03:08.723 に答える
1

JFrame と JPanel はクラスなので、同時に 2 つのクラスを直接継承することはできません。

最初に JPanel を作成し、それにコンポーネントを追加します。

次に、Jpanel を JFrame に設定します (JFrame には JRootPane が唯一の子として含まれます)。

class Sample extends JFrame{

Sample (){
    JPanel content = new JPanel();
    conent.add(comp1);
    conent.add(comp2);
    ................. //comp1,comp2 are your JButton or JTextBox or JLabel ...etc..
    .................
    setContentPane(content);
    setVisible(true);
   }


   public static void main(String[] args) {

   }

}

于 2013-07-23T00:20:22.317 に答える