【发布时间】:2014-08-06 23:48:09
【问题描述】:
我正在为 Notch 的“Prelude of the Chambered”创建一个包装,我希望制作它以便您可以调整窗口大小。我不知道如何使内容缩放,我试图覆盖 onPaint。我无法修改 Jar 来完成这项工作。
onPaint 尝试:
package com.gudenau.pc.poc;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
public class JScaledFrame extends JFrame {
private static final long serialVersionUID = 4044340683411982494L;
public JScaledFrame(String title) {
super(title);
}
@Override
public void paint(Graphics graphics){
Dimension min = getMinimumSize();
Dimension size = getSize();
BufferedImage image = new BufferedImage(min.width, min.height, BufferedImage.TYPE_4BYTE_ABGR);
Graphics subGraphics = image.getGraphics();
super.paint(subGraphics);
subGraphics.dispose();
graphics.drawImage(image, 0, 0, size.width, size.height, null);
}
}
【问题讨论】:
-
为什么要在 Swing 中实现双缓冲策略? Swing 组件已经是双缓冲的......除了顶级容器,但你真的不应该在没有充分理由的情况下覆盖绘画
-
我需要从 Applet 缩放图像。
-
那么这确实是一个好方法,您可以缩放“视图”,但这不会缩放它处理事件的方式。看看this example 和this example,它们允许您缩放组件,但也可以缩放它们需要操作的事件......请注意,我相信它只适用于 Swing
-
如果您使用的是基于 AWT 的小程序,您可能会发现这是不可能的,因为 AWT 组件通常在本机级别呈现......并不是说不可能,但还有很多事情要做考虑...
-
所有输入都来自键盘,因此缩放不是问题。