You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Swing中BufferedImage与JFrame同分辨率却显示比例不一致问题

问题解决:JFrame中BufferedImage右下角像素被裁剪

问题根源在于JFrame的setSize()方法设置的是整个窗口的总尺寸(包含标题栏和边框),而你要放置的640×480 BufferedImage需要完整显示在内容面板里,内容面板的实际可用空间会比640×480小,所以右下角像素被窗口边框挡住了。

解决步骤:

  1. 给PixelGrid添加首选尺寸方法
    让自定义组件告诉布局它需要的空间大小,在PixelGrid类中重写getPreferredSize():

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(grid.getWidth(), grid.getHeight());
    }
    
  2. 替换JFrame的setSize为pack()
    删掉window.setSize(640,480);,改用pack()让窗口自动适配内容大小:

    int width = 640;
    int height = 480;
    PixelGrid aGrid = new PixelGrid(width, height);
    JFrame window = new JFrame("help me");
    
    window.add(aGrid);
    // 替换setSize为pack
    window.pack();
    window.setVisible(true);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
  3. 确保正确实现paintComponent
    你的PixelGrid必须正确绘制BufferedImage,检查是否有这个方法:

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        // 将BufferedImage绘制到组件上
        g.drawImage(grid, 0, 0, this);
    }
    

这样处理后,JFrame会根据PixelGrid的实际需要(640×480)加上窗口边框和标题栏的尺寸,内容面板就能完整容纳你的像素网格,右下角的像素不用放大窗口也能正常显示。

内容的提问来源于stack exchange,提问作者Slomas99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 02:00:13