【问题标题】:Java JFrame fillRect methode draws wrong rectangle size [duplicate]Java JFrame fillRect方法绘制错误的矩形大小[重复]
【发布时间】:2016-01-12 02:13:37
【问题描述】:

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

我的代码:

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

【问题讨论】:

  • “我的 GUI 中的原点偏离了大约 25/26 像素” 这个标题与 JFrame 无关,甚至与 Java 无关。我怎么知道它是重复的?分析标题名称中带有“像素”的所有问题?
  • 我不知道,这是一个有多个答案的常见问题。花一些时间研究这个问题可能会有所帮助,也许检查教程或文档?它是重复的事实不是问题(据说),帮助你找到答案是。您可能会注意到,现在“接受”的答案实际上是错误的,并且会误导其他可能有类似问题的开发人员

标签: java swing graphics jframe drawrectangle


【解决方案1】:

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

【讨论】:

  • 或者,因为顶级容器不是双缓冲的,所以使用JPanel 并覆盖它的paintComponent 方法,如Performing Custom Painting 中所述
猜你喜欢
  • 1970-01-01
  • 2017-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-30
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
相关资源
最近更新 更多