2013-06-05 125 views
0

我正在研究Java中的程序,并且在W8中的标题栏遇到问题。出于某种原因,协调人(0,0)已经启动并隐藏在标题栏中。如果我想在(0,0)处绘制某些东西,我必须将Graphics对象转换为(0,10)以使其显现。Java和Windows 8工具栏

我目前有:

 g.setColor(Color.BLACK); 
     g.fillRect(0, 0, Config.WIDTH + 10, Config.HEIGHT + 10); 
     g.translate(0, 10); 
     g.setColor(Color.WHITE); 
     g.setFont(fonts.getFont(0)); 
     g.drawString("FPS: " + scr.fps, 0, 0); 

这工作,但我想删除g.translate(0, 10);柜面此行结束了以后造成的问题。

回答

0

该问题与Windows 8无关,但是您已覆盖顶级容器的paint这一事实。

框架边框在窗口边界内绘画。

一个框架有一个内容窗格应该用来布置内容或执行自定义绘画。

而不是重写顶级容器的paint,创建您自己的自定义组件(从类似于JPanel之类的东西延伸)并覆盖它的paintComponent方法。

然后,您可以将其添加到帧的内容窗格或更换帧内容窗格

退房......

为了进一步解释

+0

我画到这是画到一个JFrame一个JPanel,因此为什么(0,10)是左上角和不(8.38)。发现我出于某种原因正在使用的字体想要开始绘制它应该在-10像素以上的位置。感谢您的回复! – Sakki

+0

这是因为字体想要在上行线('FontMetrics#getAscent')开始渲染。看看[使用文本API,测量文本](http://docs.oracle.com/javase/tutorial/2d/text/measuringtext.html)和['FontMetrics'](http://docs.oracle.com) .com/javase/7/docs/api/java/awt/FontMetrics.html)以获取更多详细信息 – MadProgrammer