仅标题栏显示,JFrame未显示

时间:2017-04-15 21:58:34

标签: java swing canvas jframe

标题栏仅在我点击运行后显示,框架无效.... 这是我的代码 我不知道发生了什么事! 有人能帮我吗?

import java.awt.Canvas;
import javax.swing.JFrame;


public class Display extends Canvas implements Runnable {

    private static final long serialVersionUID = 1L;
    public static final int WIDTH = 800;
    public static final int HEIGH = 600;
    public static String TITLE = "3D Game";

    private Thread thread;
    private boolean running = false;
    private void start(){
        if(running) return;
        running = true;
        thread = new Thread();
        thread.start();

        System.out.println("Working");
    }

    private void stop(){
        if(!running)
            return;
        running = false;
        try{
        thread.join();
        }catch (Exception e){
            e.printStackTrace();
            System.exit(0);
    }   
    }
    public void run(){
        while(running){

        }
    }



    public static void main(String[] args){

        Display game = new Display();
        JFrame frame = new JFrame();
        frame.add(game);
        //frame.pack();
        frame.setTitle(TITLE);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(WIDTH,HEIGHT);
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        frame.setVisible(true);

        game.start();

    }


}

2 个答案:

答案 0 :(得分:2)

看看

之间的区别
public static final int HEIGH = 600;

frame.setSize(WIDTH, HEIGHT);

Canvas间接定义了两个public static字段WIDTHHEIGHT分别设置为12

更好的解决方案是覆盖Canvas s getPreferredSize方法并返回您想要的首选尺寸...

@Override
public Dimension getPreferredSize() {
    return new Dimension(800, 600);
}

你可以使用pack

Display game = new Display();
JFrame frame = new JFrame();
frame.add(game);
frame.pack();
frame.setTitle(TITLE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true);

在顶级容器上使用setSize的提示或警告。窗口通常包含框架装饰,这些装饰包含在窗口边界内。如果使用setSize,则会减少窗口装饰量的内容区域,这将导致小于预期的大小。相反,您应该覆盖主容器的getPreferredSize方法并调用pack。这允许窗口打包"打包"它本身围绕着内容,但为框架装饰留出空间,保留了您所要求的空间。

FrameSetup

您还可以查看:

了解更多详情

答案 1 :(得分:0)

您在声明静态高度变量时发了错误,您已将其声明为" HEIGH "但在JFrame中你使用了" HEIGHT "

public static final int HEIGH = 600;

frame.setSize(WIDTH,HEIGHT);

因此,将变量更改为 HEIGHT ,它应该可以正常工作