it-swarm.com.de

Bild zu JFrame hinzufügen

Also benutze ich Eclipse mit Windows Builder. Ich habe mich nur gefragt, ob es trotzdem möglich ist, ein Bild zu importieren, das auf dem JFrame angezeigt wird, sodass ich mich leicht bewegen und die Größe neu bestimmen kann, anstatt Ort und Größe festzulegen und es zu zeichnen.

9
user2612619

Es gibt keine spezielle Bildkomponente in Swing (was meiner Meinung nach traurig ist). Es gibt also einige Optionen:

  1. Wie @Reimeus sagte: Benutze ein JLabel mit einem Icon.
  2. Erstellen Sie im Fenster-Generator ein JPanel, das die Position des Bildes darstellt. Fügen Sie dem JPanel dann Ihre eigene benutzerdefinierte Bildkomponente hinzu. Verwenden Sie dazu ein paar Zeilen Code, die Sie nie ändern müssen. Sie sollten so aussehen:

    JImageComponent ic = new JImageComponent(myImageGoesHere);
    imagePanel.add(ic);
    

    dabei ist JImageComponent eine selbst erstellte Klasse, die JComponent erweitert und die paintComponent()-Methode überschreibt, um das Bild zu zeichnen.

14

Hier ist ein einfaches Beispiel für das Hinzufügen eines Bildes zu JFrame:

frame.add(new JLabel(new ImageIcon("Path/To/Your/Image.png")));
18
Rollyng

Wenn Sie Netbeans für die Entwicklung verwenden, verwenden Sie jLabel und ändern Sie die icon -Eigenschaft. 

2
rishad2m8

Wie Martijn-Courteaux bereits sagte, erstellen Sie eine benutzerdefinierte Komponente. Dies ist die bessere Option. In C # gibt es eine Komponente namens PictureBox , und ich habe versucht, diese Komponente für Java zu erstellen. Hier ist der Code:

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;
        }
    }

}

Wenn Sie ein Bild hinzufügen möchten, wählen Sie die JPictureBox aus. Gehen Sie anschließend zu Eigenschaften und suchen Sie die Eigenschaft "icon" und wählen Sie ein Bild aus. Wenn Sie die sizeMode -Eigenschaft ändern möchten, wählen Sie die JPictureBox aus Finden Sie die Eigenschaft "sizeMode", können Sie einige Werte auswählen:

  • NORMAL-Wert, das Bild befindet sich in der oberen linken Ecke der JPictureBox.
  • Der STRETCH-Wert bewirkt, dass das Bild an die JPictureBox angepasst oder verkleinert wird.
  • Der ZOOM-Wert bewirkt, dass das Bild entsprechend der JPictureBox gestreckt oder verkleinert wird. Das Seitenverhältnis im Original wird jedoch beibehalten.
  • Der CENTER-Wert bewirkt, dass das Bild im Client-Bereich zentriert wird. 

Wenn Sie mehr zu diesem Thema erfahren möchten, können Sie dieses video überprüfen.

Sie können den Code auch auf Gitlab oder Github sehen.

0
ricardo130