Java Swing中BufferedImage与JFrame同分辨率却显示比例不一致问题
问题解决:JFrame中BufferedImage右下角像素被裁剪
问题根源在于JFrame的setSize()方法设置的是整个窗口的总尺寸(包含标题栏和边框),而你要放置的640×480 BufferedImage需要完整显示在内容面板里,内容面板的实际可用空间会比640×480小,所以右下角像素被窗口边框挡住了。
解决步骤:
给PixelGrid添加首选尺寸方法
让自定义组件告诉布局它需要的空间大小,在PixelGrid类中重写getPreferredSize():@Override public Dimension getPreferredSize() { return new Dimension(grid.getWidth(), grid.getHeight()); }替换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);确保正确实现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
相关产品推荐
相关产品推荐

