2013-02-13 132 views
0

你好我正在Java中制作一个游戏,并且我使用DefaultToolkit获得了screenSize,但是问题是如果它是FULLSCREEN,它将检测屏幕的大小。如何获得游戏屏幕(不是全屏)占用的区域的屏幕尺寸。更确切地说,由于系统工具栏添加了额外的“填充”,所以我的精灵正在移动到底部屏幕的边缘之外。如何获得游戏屏幕占用的区域大小?非常感谢Java中的屏幕大小

+2

使用['Frame.setExtendedState(MAXIMIZED_BOTH)'](http://docs.oracle.com/javase/7/ docs/api/java/awt/Frame.html#setExtendedState%28int%29),然后使用'gameScreen.getSize()'绘制区域的尺寸。 – 2013-02-13 03:26:46

+0

@AndrewThompson假设框架没有装饰,否则你会想要使用容器的大小 – MadProgrammer 2013-02-13 03:30:04

+0

@MadProgrammer我假设'gameScreen'是从'JComponent'或'JPanel'扩展的'游戏渲染/绘画区'来添加到(或设置)框架的内容窗格。虽然也许我应该更清楚一点。 ;) – 2013-02-13 03:52:29

回答

1

您可以使用Insets获取任务栏的大小和其他内容。这里有一个例子来获得不包含任务栏/其他的屏幕尺寸。

// Screen size 
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); 

// Screen insets 
Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(getGraphicsConfiguration()); 

// Get the real width/height 
int width = screen.getWidth() - insets.left - insets.right; 
int height = screen.getHeight() - insets.top - insets.bottom; 
+0

假设OP使用的窗口是未修饰的,否则您只想使用容器的大小。但是,这可以用来将窗口的大小设置在第一位+1 – MadProgrammer 2013-02-13 03:30:54

3

我觉得屏幕边界是你在找什么:

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"); 
     frame.setSize(200, 200); 
     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()); 
    } 
}