标题栏仅在我点击运行后显示,框架无效.... 这是我的代码 我不知道发生了什么事! 有人能帮我吗?
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();
}
}
答案 0 :(得分:2)
看看
之间的区别public static final int HEIGH = 600;
和
frame.setSize(WIDTH, HEIGHT);
Canvas
间接定义了两个public static
字段WIDTH
和HEIGHT
分别设置为1
和2
更好的解决方案是覆盖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
。这允许窗口打包"打包"它本身围绕着内容,但为框架装饰留出空间,保留了您所要求的空间。
您还可以查看:
了解更多详情
答案 1 :(得分:0)
您在声明静态高度变量时发了错误,您已将其声明为" HEIGH "但在JFrame中你使用了" HEIGHT "
public static final int HEIGH = 600;
frame.setSize(WIDTH,HEIGHT);
因此,将变量更改为 HEIGHT ,它应该可以正常工作