そのため、WindowsビルダーでEclipseを使用しています。とにかく、JFrameに表示される画像をインポートして、場所とサイズを設定して描画するのではなく、簡単に移動してサイズを変更できるかどうか疑問に思っていました。
Swingには特別な画像コンポーネントはありません(私の意見では悲しいことです)。そのため、いくつかのオプションがあります。
ウィンドウビルダーで、画像の場所を表すJPanelを作成します。次に、変更する必要のない数行のコードを使用して、独自のカスタムイメージコンポーネントをJPanelに追加します。次のようになります。
_JImageComponent ic = new JImageComponent(myImageGoesHere);
imagePanel.add(ic);
_
jImageComponentは、paintComponent()
メソッドをオーバーライドして画像を描画するJComponent
を拡張する自己作成クラスです。
JFrame
に画像を追加する簡単な例を次に示します。
frame.add(new JLabel(new ImageIcon("Path/To/Your/Image.png")));
Netbeansを使用して開発している場合は、jLabelを使用して、そのアイコンプロパティを変更します。
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」プロパティを見つけて、いくつかの値を選択できます。
このトピックについて詳しく知りたい場合は、これを確認してください video 。