java - 仅显示标题栏,不显示 JFrame

标签 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();

    }


}

最佳答案

看看两者的区别

public static final int HEIGH = 600;

frame.setSize(WIDTH, HEIGHT);

Canvas间接定义两个public static名为 WIDTH 的字段和HEIGHT设置为12分别

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

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

你可以只使用包

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

您还可以查看:

了解更多详情

关于java - 仅显示标题栏,不显示 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43431689/

相关文章:

java - CDI:使用构造函数参数手动创建 bean

java - 为什么 requestFocusInWindow() 会失败?

javascript - 在html5 Canvas 中绘制另一个图像下的图像

java - KeyHandler 不响应按键事件

javascript - 在图像上绘制 4 条直线(叠加)

javascript - html5 canvas javascript 复制图片

java - 抓取我们的网站以检查 Javascript 错误

java - 毫秒到天

java - 角色不会插入堆栈顶部?

java - 如何让我的顶级 Jpanel 设置其相对于另一个 jpanel 网格中的 jlabel 的位置?