したがって、メイン クラスで JFrame と JPanel の両方を拡張する必要があります。どうすればいいですか?
例えば:
public class mainClass extends JFrame {
//code here
}
同じクラスの JPanel も拡張するにはどうすればよいですか?
前もって感謝します!
メインクラスでJFrameとJPanelを拡張するには?
質問してお答えします。
息子は同時に2人の父親を持つことができますか? いいえ、誰が本当の父親かはわかりませんが、DNA 検査をすれば誰が本当の父親かがわかります。
Java には DNA テストがありません。申し訳ありませんが、多重継承は許可されていません。
あなたの場合、クラスがJFrame
との両方から拡張された場合、JPanel
このクラス、パネル、またはフレームの動作はどうなりますか?
Java は多重継承をサポートしていません。考えられる解決策には、メイン クラスに JPanel を拡張する内部クラスをコーディングし、次に JFrame を拡張する別の内部クラスをコーディングすることが含まれます。また、私が使用する一般的なアプローチであるため、それぞれのクラスを拡張する 2 つの別個の (非内部) クラスをコーディングすることもできます。
したがって、メイン クラスで JFrame と JPanel の両方を拡張する必要があります。どうすればいいですか?
できません。Java は単純な継承のみをサポートします。
そして、私の意見では、具体的な継承は、「適切に」使用しないと危険です。オブジェクトの原則と契約 (Liskov Substitution 原則、Single Responsibility 原則) を破ることができ、保守が困難になる可能性があるためです。
JFrame
本当の問題は、なぜ拡張する必要があるのかということJPanel
です。
別の手法を使用して、やりたいことを確実に達成できます。例えば、
構成。
public class MyClass{
private JPanel panel;
private JFrame frame;
}
たとえばpaintComponent
JPanelで特定の動作をオーバーライドする必要がある場合は、実行できます(匿名クラス)
{
//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{
}
}
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) {
}
}