Bry*_*ter 6 java swing graphics2d
我写了一个应用程序,自定义绘制paint()内的所有内容基于固定的像素位置.然后我禁用框架的大小调整,使其始终可见.
但是,现在我想能够调整它,但我不想改变我的绘制代码.我希望我可以抓住300x300平方的Graphics g对象并在我的所有绘制代码之后将其调整为JFrame当前大小,但我不知道我在做什么.
这里是示例代码.在这里,我希望100x100平方保持在中间,与调整大小的JFrame成比例:
package DrawAndScale;
import java.awt.Color;
import java.awt.Graphics;
public class DASFrame extends javax.swing.JFrame {
public DASFrame() {
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
this.setSize(300, 300);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new DASFrame().setVisible(true);
}
});
}
@Override
public void paint(Graphics g) {
g.setColor(Color.BLACK);
g.fill3DRect(100, 100, 100, 100, true);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
假设您将绘制 300x300 的方法重命名为 Paint300,定义一个缓冲图像:
@Override public void paint(Graphics g) {
Image bufferImage = createImage(300, 300); // empty image
paint300(bufferImage.getGraphics()); // fill the image
g.drawImage(bufferImage, 0, 0, null); // send the image to graphics device
}
Run Code Online (Sandbox Code Playgroud)
以上是当您想要以全尺寸 (300x300) 绘制时的情况。如果您的窗口大小已调整:
@Override public void paint(Graphics g) {
Image bufferImage = createImage(300, 300);
paint300(bufferImage.getGraphics());
int width = getWidth();
int height = getHeight();
CropImageFilter crop =
new CropImageFilter((300 - width)/2, (300 - height)/2 , width, height);
FilteredImageSource fis = new FilteredImageSource(bufferImage, crop);
Image croppedImage = createImage(fis);
g.drawImage(croppedImage, 0, 0, null);
}
Run Code Online (Sandbox Code Playgroud)
新类来自 java.awt.image.*。
我没有测试这段代码。这只是为了引导你走向正确的方向。
| 归档时间: |
|
| 查看次数: |
8123 次 |
| 最近记录: |