Java 为什么我的框架比我设定的要大?
我正在用Java开发一个简单的2D游戏。我的问题是,我的窗口似乎比我设置的要大。我将其设置为800 x 800,但是,正如您从我的图片中看到的,底部的示例矩形仅为750。如果我把它调到800,它就会从屏幕上消失 MainJava 为什么我的框架比我设定的要大?,java,swing,Java,Swing,我正在用Java开发一个简单的2D游戏。我的问题是,我的窗口似乎比我设置的要大。我将其设置为800 x 800,但是,正如您从我的图片中看到的,底部的示例矩形仅为750。如果我把它调到800,它就会从屏幕上消失 Main JFrame myFrame = new JFrame(); myFrame.setSize(800,800); world map = new world(); myFrame.add(map); 地图 //The only way I ca
JFrame myFrame = new JFrame();
myFrame.setSize(800,800);
world map = new world();
myFrame.add(map);
地图
//The only way I can get this to the bottom is setting it to 750. But my window is 800, where
//did the extra 50 pixels go?
g2d.draw3DRect(400, 750, 29, 20, true);
当您使用
JFrame.setSize(int-width,int-height)
时,您实际上设置了整个窗口的大小。这当然包括装饰和标题栏,它们占用了一些空间。在您的例子中,这似乎是大约50像素。尝试使用getContentPane().setPreferredSize(新维度(800800))设置JFrame的内部边界代码>取而代之
编辑:您需要在JFrame的某个地方调用pack()
,以便它实际调整窗口大小。当您使用JFrame.setSize(int-width,int-height)
时,您实际设置了整个窗口的大小。这当然包括装饰和标题栏,它们占用了一些空间。在您的例子中,这似乎是大约50像素。尝试使用getContentPane().setPreferredSize(新维度(800800))设置JFrame的内部边界代码>取而代之
编辑:您需要在JFrame上的某个地方调用pack()
,以便它实际调整窗口大小。框架可能是800 x 800,但您进行自定义绘制的面板小于此值,因为框架装饰(标题栏和边框)占用空间
查看这段代码以演示这一点:
import java.awt.*;
import javax.swing.*;
public class FrameInfo
{
public static void main(String[] args)
{
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
Rectangle bounds = env.getMaximumWindowBounds();
System.out.println("Screen Bounds: " + bounds );
GraphicsDevice screen = env.getDefaultScreenDevice();
GraphicsConfiguration config = screen.getDefaultConfiguration();
System.out.println("Screen Size : " + config.getBounds());
System.out.println(Toolkit.getDefaultToolkit().getScreenSize());
JFrame frame = new JFrame("Frame Info");
// JDialog frame = new JDialog();
System.out.println("Frame Insets : " + frame.getInsets() );
frame.setSize(200, 200);
// frame.pack();
System.out.println("Frame Insets : " + frame.getInsets() );
frame.setVisible( true );
System.out.println("Frame Size : " + frame.getSize() );
System.out.println("Frame Insets : " + frame.getInsets() );
System.out.println("Content Size : " + frame.getContentPane().getSize() );
}
}
关键是不应该在帧上使用setSize()方法
相反,在自定义面板中,您重写getPreferredSize()
方法以返回800 x 800,然后调用:
frame.pack();
frame.setVisible(true);
现在,所有组件都将以其首选尺寸显示
此外,类名应以大写字符开头。“地图”应该是“地图”。看看JavaAPI,您会注意到这一点。不要制定自己的惯例 框架可能是800 x 800,但进行自定义绘制的面板小于此值,因为框架装饰(标题栏和边框)占用空间
查看这段代码以演示这一点:
import java.awt.*;
import javax.swing.*;
public class FrameInfo
{
public static void main(String[] args)
{
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
Rectangle bounds = env.getMaximumWindowBounds();
System.out.println("Screen Bounds: " + bounds );
GraphicsDevice screen = env.getDefaultScreenDevice();
GraphicsConfiguration config = screen.getDefaultConfiguration();
System.out.println("Screen Size : " + config.getBounds());
System.out.println(Toolkit.getDefaultToolkit().getScreenSize());
JFrame frame = new JFrame("Frame Info");
// JDialog frame = new JDialog();
System.out.println("Frame Insets : " + frame.getInsets() );
frame.setSize(200, 200);
// frame.pack();
System.out.println("Frame Insets : " + frame.getInsets() );
frame.setVisible( true );
System.out.println("Frame Size : " + frame.getSize() );
System.out.println("Frame Insets : " + frame.getInsets() );
System.out.println("Content Size : " + frame.getContentPane().getSize() );
}
}
关键是不应该在帧上使用setSize()方法
相反,在自定义面板中,您重写getPreferredSize()
方法以返回800 x 800,然后调用:
frame.pack();
frame.setVisible(true);
现在,所有组件都将以其首选尺寸显示
此外,类名应以大写字符开头。“地图”应该是“地图”。看看JavaAPI,您会注意到这一点。不要制定自己的惯例 啊,好吧,那是因为。谢谢啊,好吧,那是因为。谢谢啊,我忘了边界。那是因为。谢谢啊,我忘了边界。那是因为。谢谢