it-roy-ru.com

Добавление изображения в JFrame

Поэтому я использую Eclipse с Windows Builder. Мне было просто интересно, есть ли в любом случае, я могу импортировать изображение, которое будет отображаться в JFrame, что я могу легко перемещать и изменять размер вместо установки местоположения и размера и рисования.

9
user2612619

В Swing нет специализированного компонента изображения (что, на мой взгляд, печально). Итак, есть несколько вариантов:

  1. Как сказал @Reimeus: используйте JLabel со значком.
  2. Создайте в конструкторе окон JPanel, который будет представлять местоположение изображения. Затем добавьте свой собственный компонент изображения в JPanel, используя несколько строк кода, которые вам никогда не придется менять. Они должны выглядеть так:

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

    где JImageComponent - это самостоятельно созданный класс, расширяющий JComponent, который переопределяет метод paintComponent() для рисования изображения.

14
Martijn Courteaux

Вот простой пример добавления изображения в JFrame:

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

Если вы используете Netbeans для разработки, используйте jLabel и измените его свойство значка. 

2
rishad2m8

Как сказал 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, после этого перейдите в «Свойства», найдите свойство «icon» и выберите изображение .... Если вы хотите изменить свойство sizeMode, выберите JPictureBox, после этого перейдите в «Свойства» и найти свойство «sizeMode», вы можете выбрать несколько значений:

  • НОРМАЛЬНОЕ значение, изображение расположено в верхнем левом углу JPictureBox.
  • Значение STRETCH приводит к растяжению или сжатию изображения в соответствии с JPictureBox.
  • Значение ZOOM приводит к растяжению или сжатию изображения для соответствия JPictureBox; однако соотношение сторон в оригинале сохраняется.
  • Значение CENTER приводит к центру изображения в клиентской области. 

Если вы хотите узнать больше об этой теме, вы можете проверить это видео .

Также вы можете увидеть код на Gitlab или Github .

0
ricardo130