我正在使用Java进行简单的2D游戏。我的问题是我的窗口看起来比我设置的要大。我把它设置为800 x 800,但是,正如你从我的照片中看到的那样,底部的样本矩形只有750.如果我把它放在800,它就会离开屏幕。
主要
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);
答案 0 :(得分:3)
使用JFrame.setSize(int width, int height)
时,实际上设置了整个窗口的大小。这当然包括装饰和标题栏,占据了一些空间。在你的情况下,这似乎是约50像素。尝试使用getContentPane().setPreferredSize(new Dimension(800,800));
来设置JFrame的内部边界。
编辑:您需要在某处调用JFrame上的pack()
才能实际调整窗口大小。
答案 1 :(得分:3)
框架可能是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);
现在所有组件都将以其首选尺寸显示。
此外,类名应以大写字母开头。 "映射"应该是" Map"。看看Java API,您会注意到这一点。不要自己制定约定!