This question already has an answer here:
The point of origin in my GUI is off by about 25/26 pixels
                                
                                    (1个答案)
                                
                        
                                3年前关闭。
            
                    
我开始尝试JFrame,我要完成的第一个任务是使用fillRect()drawRect()方法绘制一个50px的正方形。不幸的是,运行后,程序显示的是矩形而不是正方形。

java - Java JFrame fillRect方法绘制错误的矩形大小-LMLPHP

我的代码:

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();
    }
}

最佳答案

该帧实际上从左上角开始。只需添加一个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。

09-26 20:56