在扩展JFrame时,JPanel无法正确显示

时间:2016-11-11 06:16:35

标签: java swing jframe jpanel

这是我的作业。

我的方向: GuessGame类:这个类包含创建JFrame对象的main函数,设置JFrame的大小,可见性和退出。

类GuessGameFrame:GuessGameFrame类扩展了JFrame。所以GuessGameFrame类包含JFrame类中定义的所有变量和方法。

我不是100%确定我的问题是什么,但我认为JPanel无法正常工作

如果我遗漏任何重要信息,请大家多多感激之情,请告诉我,我可以添加更多细节。

主要课程:

public class GuessGame {

             public static void main(String[] args){
                  GuessGameFrame localGuessGameFrame = new GuessGameFrame();
                  localGuessGameFrame.setVisible(true); //set visible
                  localGuessGameFrame.setSize(380,175); // set size 380 width 175 height
                  localGuessGameFrame.setDefaultCloseOperation(localGuessGameFrame.EXIT_ON_CLOSE); // needed to enable the red X button to close the program
             }
}

扩展课程:

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

public class GuessGameFrame extends JFrame
    {

    private int lastDistance; // distance between last guess and number
    private Color background; // background color of application

    private JFrame f;
    static JPanel p;
    private JButton b1;
    private JLabel l1;
    private JLabel l2;
    JTextField t1 = new JTextField(8);
    private JLabel l3;

    //declare constructor
    public GuessGameFrame()
    {
    //create our JFrame
    f = new JFrame("Guessing game");

    //create our panel
        p = new JPanel();
        p.setBackground(Color.MAGENTA); // background color is magenta

        //create our labels
        l1 = new JLabel("I have a number between 1 and 1000.");
        l2 = new JLabel("Can you guess my number? Enter your first Guess:.");
        l3 = new JLabel("Guess result appears here.");
        //create our button
        b1 = new JButton("New Game");

        //add button and label to panel
        p.add(l1); // Adds label 1
        p.add(l2); // adds label 2
        p.add(t1); // adds textfield 1
        p.add(l3); // adds label 3
        p.add(b1); // adds button 1

        //add panel to JFrame
        f.add(p);
    }
}

执行时输出窗口的屏幕截图: enter image description here

我希望它看起来像这样:

enter image description here

1 个答案:

答案 0 :(得分:4)

您需要在JFrame f课程中删除GuessGameFrame,因为GuessGameFrame已经是JFrame

并更新您的代码:

f = new JFrame("Guessing game");this.setTitle("Guessing game");

f.add(p);this.getContentPane().add(p);