所以我将 Eclipse 与 Windows builder 一起使用。我只是想知道是否无论如何我可以导入将显示在 JFrame 上的图像,我可以轻松地四处移动和重新调整大小,而不是设置位置和大小并绘制它。
问问题
193852 次
4 回答
31
这是一个将图像添加到 a 的简单示例JFrame
:
frame.add(new JLabel(new ImageIcon("Path/To/Your/Image.png")));
于 2013-08-03T00:05:57.253 回答
18
Swing 中没有提供专门的图像组件(我认为这很可悲)。所以,有几个选择:
- 正如@Reimeus 所说:使用带有图标的JLabel。
在窗口构建器中创建一个 JPanel,它将表示图像的位置。然后使用几行代码将您自己的自定义图像组件添加到 JPanel,您将永远不必更改。它们应该如下所示:
JImageComponent ic = new JImageComponent(myImageGoesHere); imagePanel.add(ic);
其中 JImageComponent 是一个自行创建的类,它扩展
JComponent
了覆盖paintComponent()
绘制图像的方法。
于 2013-08-03T00:09:11.303 回答
5
如果使用 Netbeans 进行开发,请使用 JLabel 并更改其图标属性。
于 2014-01-22T14:06:23.587 回答
2
正如 martijn-courteaux 所说,创建一个自定义组件是更好的选择。在 C# 中存在一个名为PictureBox的组件,我尝试为 Java 创建此组件,代码如下:
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
public class JPictureBox extends JComponent {
private Icon icon = null;
private final Dimension dimension = new Dimension(100, 100);
private Image image = null;
private ImageIcon ii = null;
private SizeMode sizeMode = SizeMode.STRETCH;
private int newHeight, newWidth, originalHeight, originalWidth;
public JPictureBox() {
JPictureBox.this.setPreferredSize(dimension);
JPictureBox.this.setOpaque(false);
JPictureBox.this.setSizeMode(SizeMode.STRETCH);
}
@Override
public void paintComponent(Graphics g) {
if (ii != null) {
switch (getSizeMode()) {
case NORMAL:
g.drawImage(image, 0, 0, ii.getIconWidth(), ii.getIconHeight(), null);
break;
case ZOOM:
aspectRatio();
g.drawImage(image, 0, 0, newWidth, newHeight, null);
break;
case STRETCH:
g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null);
break;
case CENTER:
g.drawImage(image, (int) (this.getWidth() / 2) - (int) (ii.getIconWidth() / 2), (int) (this.getHeight() / 2) - (int) (ii.getIconHeight() / 2), ii.getIconWidth(), ii.getIconHeight(), null);
break;
default:
g.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null);
}
}
}
public Icon getIcon() {
return icon;
}
public void setIcon(Icon icon) {
this.icon = icon;
ii = (ImageIcon) icon;
image = ii.getImage();
originalHeight = ii.getIconHeight();
originalWidth = ii.getIconWidth();
}
public SizeMode getSizeMode() {
return sizeMode;
}
public void setSizeMode(SizeMode sizeMode) {
this.sizeMode = sizeMode;
}
public enum SizeMode {
NORMAL,
STRETCH,
CENTER,
ZOOM
}
private void aspectRatio() {
if (ii != null) {
newHeight = this.getHeight();
newWidth = (originalWidth * newHeight) / originalHeight;
}
}
}
如果要添加图像,请选择 JPictureBox,然后转到属性并找到“图标”属性并选择图像。如果要更改 sizeMode 属性然后选择 JPictureBox,然后转到 Properties 并找到“sizeMode”属性,您可以选择一些值:
- NORMAL 值,图像位于 JPictureBox 的左上角。
- STRETCH 值使图像拉伸或收缩以适合 JPictureBox。
- ZOOM 值导致图像被拉伸或缩小以适合 JPictureBox;但是,原始的纵横比保持不变。
- CENTER 值使图像在客户区居中。
如果您想了解有关此主题的更多信息,可以查看此视频。
于 2018-08-02T23:56:40.947 回答