[英]How to keep aspect ratio in JPanel
我有点坚持在JPanel
上保持宽高比。
我已经从Netbeans使用边框布局默认生成了JFrame
。 整个框架充满了我的JPanel
(来自我的自定义类GraphicsPanel.java,扩展了JPanel
)。
GraphicsPanel类只有一种覆盖方法,可以使用一些基本构造函数来绘制图形。 我的JPanel
上有一个矩形和多边形。 我想要实现的是,当我调整框架的大小时,我希望将JPanel
的纵横比保持在4:3(或类似的比例)。 当框架对于宽高比而言太大时,它将使用某些默认颜色填充框架背景。
我已经阅读了一些有关宽高比的主题(例如this )。 但是没有运气,我仍然不知道如何去做。
这是我的JPanel
类中的代码。 我是新手,我想学习如何使用Java图形(绘制,填充,调整大小等),所以请对我轻松一点。
import java.awt.Color;
import java.awt.Graphics;
public class GraphicsPanel extends javax.swing.JPanel {
private int x;
private int z;
private int y;
public GraphicsPanel() { //constructor
initComponents();
x = getHeight() / 2;
z = getWidth() / 2;
y = getHeight() - 1;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
x = getHeight() / 2;
z = getWidth() / 2;
y = getHeight() - 1;
setBackground(new Color(255, 255, 255));
g.setColor(Color.red);
g.fillRect(0, x, getWidth() - 1, y);
g.setColor(Color.blue);
int[] poleX = {0, 0, z};
int[] poleY = {0, y, x};
g.fillPolygon(poleX, poleY, 3);
}
}
我认为您想要的是在面板中绘制图像(看起来很像捷克国旗!),但不填充所有空间。 例如,如果边框非常宽,则图像将不会填满整个宽度。 如果我理解正确,这并不难。
在代码中,您将获得面板的宽度和高度。 完成后,请进行一些算术运算。 如果纵横比“太宽”,则图像将填充高度,否则将填充宽度。 现在您知道了一个尺寸,因此您可以计算另一个尺寸,并且只绘制足够大的图像以适合这些尺寸。
编辑 :示例计算...
if panel width / panel height > 4 / 3
// too wide
// use panel height as image height
// calculate image width from image height
else
// use panel width as image width
// calculate image height from image width
面板的尺寸和形状很难固定(不可能?)。 您必须将面板添加到容器中(示例中为JFrame,但可以是任何东西),容器将使用布局管理器来设置面板大小。
我需要维护要绘制的图像(但是我想维护组件的比例会更容易)。 因为我的图像不是经典图像(png,jpg),而是绘制/填充中的一些形状看起来像图像。
好了,您可以轻松地以适当的宽高比以合理的大小创建BufferedImage
,并将形状绘制到BufferedImage上
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = image.createGraphics();
// paint image background
g2d.setColor( ... );
g2d.fillRect(0, 0, width, height);
// draw shapes
g2d.fillOval(....);
您可以使用Darryls Stretch Icon在JLabel中显示图像。 StretchIcon
类将在标签可用的空间内按比例缩放Icon:
JLabel label = new JLabel( new StretchIcon(image) );
frame.add(label);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.