Зная расстояние между изображением в jLabel и вершиной jLabel, когда оно центрировано - PullRequest
0 голосов
/ 31 октября 2019

Я новичок здесь.

У меня есть JLabel с фиксированным размером и изображение в нем, размещенное с JLabel.CENTER. Я хотел знать, как оно размещает изображение, например, когда ширина изображения составляет 49 пикселей, а ширина метки - 50 пикселей. появляется ли пиксель в начале или в конце метки.

здесь изображение в jLabel (у jLabel есть рамка) реальное изображение

Спасибо тем, кто найдет время, чтобы прочитать это

1 Ответ

0 голосов
/ 01 ноября 2019

Нет точной гарантии, как именно будет отцентрирован значок JLabel, если количество лишних пикселей нечетное. Конечно, вы можете наблюдать текущее поведение, но нет гарантии, что более поздняя версия Java не сделает это иначе.

Если вы хотите быть уверенным, вы можете создать подкласс JPanel, переопределив paintComponent и getPreferredSize методами, и нарисуйте изображение самостоятельно:

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Insets;
import javax.swing.JPanel;

public class ImagePanel
extends JPanel {
    private static final long serialVersionUID = 1;

    private Image image;

    public ImagePanel(Image image) {
        this.image = image;
    }

    @Override
    public Dimension getPreferredSize() {
        Insets insets = getInsets();
        Dimension size = new Dimension(
            insets.left + insets.right, insets.top + insets.bottom);

        if (image != null) {
            int width = image.getWidth(this);
            int height = image.getHeight(this);

            size.width += Math.max(width, 0);
            size.height += Math.max(height, 0);
        }

        return size;
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        if (image != null) {
            int width = image.getWidth(this);
            int height = image.getHeight(this);
            if (width > 0 && height > 0) {
                int widthDifference = getWidth() - width;

                int x = widthDifference / 2;
                if (widthDifference % 2 != 0) {
                    // If you want the extra space on the left:
                    //x++;
                }

                int y = (getHeight() - height) / 2;

                g.drawImage(image, x, y, this);
            }
        }
    }
}
...