2016-01-11 50 views
2

我开始尝试使用JFrame,我想要完成的第一项任务是使用fillRect()drawRect()方法绘制50px的正方形。不幸的是跑完后,程序显示了一个矩形而不是一个正方形。Java JFrame fillRect方法绘制错误的矩形大小

This is defenitly not a square

我的代码:

package javaapp; 

import java.awt.Graphics; 
import javax.swing.JFrame; 

public class JavaApp extends JFrame{ 

    public JavaApp() { 
     setTitle("Voorbeeld"); 
     setSize(250, 250); 
     setResizable(false); 
     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 
    public void paint (Graphics g){ 
     g.fillRect(0, 0, 50, 50); 
    } 
    public static void main(String[] args) { 
     new JavaApp(); 
    } 
} 
+0

“我的GUI的起源点大约是25/26像素”这个标题与JFrame没有关系,甚至没有Java。我怎么知道它是重复的?用标题名称中的“Pixel”分析所有问题? –

+0

我不知道,这是一个有多个答案的常见问题。花些时间研究这个问题可能会有所帮助,也许会检查教程或文档?这是一个重复的事实不是问题(每说),帮助你找到答案。您可能会注意到,现在“已接受”的答案实际上是错误的并且误导了其他开发人员,可能有类似的问题 – MadProgrammer

回答

4

框架实际上是在左上角的开始方式。只需添加一个JPanel并在其上绘制它就很简单。否则,你可以调用setUndecorated(true)

class JavaApp extends JFrame { 

    public JavaApp() { 
     setTitle("Voorbeeld"); 
     setSize(250, 250); 
     setResizable(false); 
     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     add(new JPanel() { 
      protected void paintComponent(Graphics g) { 
       g.setColor(Color.BLACK); 
       g.clearRect(0, 0, getWidth(), getHeight()); 
       g.fillRect(0, 0, 50, 50); 
      } 
     }); 
    } 

    public static void main(String[] args) { 
     new JavaApp(); 
    } 
} 

使用的paintComponent代替。

+0

或者,因为顶级容器没有双缓冲,所以使用'JPanel'并覆盖它的'paintComponent'方法相反,如[执行自定义绘画](http://docs.oracle.com/javase/tutorial/uiswing/painting/)中所述, – MadProgrammer