Неправильное расположение фонового изображения
Я пытаюсь создать класс BackgroundImage, целью которого является создание фона с несколькими слоями изображений, я использую JLayeredPane для достижения слоев.
Фоновое изображение будет содержать постоянное базовое изображение и будет иметь методы, которые позволяют (надеюсь) постепенно увеличивать и уменьшать изображения на этом базовом изображении.
Прямо сейчас я застрял на базовом изображении, находящемся неправильно.
Вот изображение, которое показывает проблему:
Как вы можете видеть на изображении, над изображением есть небольшая серая область, которой не должно быть. Я бы хотел, чтобы базовое изображение занимало все пространство.
Вот MCVE:
Класс BackgroundTest
import java.awt.*;
import javax.swing.*;
final class BackgroundTest extends JFrame {
public static void main(String[] args) {
new BackgroundTest();
}
BackgroundTest() {
JPanel contentPanel = new JPanel();
BackgroundImage bgImage = new BackgroundImage(contentPanel);
add(contentPanel);
setSize(getScreenDimension());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static Dimension getScreenDimension() {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
Rectangle bounds = ge.getMaximumWindowBounds();
return new Dimension((int) bounds.getWidth(), (int) bounds.getHeight());
}
}
Класс BackgroundImage
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
import org.imgscalr.Scalr;
class BackgroundImage {
private final BaseImage baseImage;
private final JPanel targetPanel;
private final JLayeredPane layeredPane;
BackgroundImage(JPanel targetPanel) {
this.targetPanel = targetPanel;
layeredPane = new JLayeredPane();
Dimension screenDimension = BackgroundTest.getScreenDimension();
layeredPane.setPreferredSize(screenDimension);
layeredPane.setMaximumSize(screenDimension);
layeredPane.setMinimumSize(screenDimension);
baseImage = new BaseImage();
layeredPane.add(baseImage, new Integer(0));
targetPanel.add(layeredPane);
}
public void addCharacterImageToBase(int characterIdentifier) {
}
public void replaceCurrentCharacterImage(int characterIdentifier) {
}
private class BaseImage extends JComponent {
private ImageIcon imageIcon;
private int imageWidth, imageHeight;
BaseImage() {
BufferedImage backgroundImage;
try {
Dimension screenSize = BackgroundTest.getScreenDimension();
imageWidth = screenSize.width;
imageHeight = screenSize.height;
setBounds(0, 0, imageWidth, imageHeight);
backgroundImage = ImageIO.read(getClass().getResource("/images/background/sky.jpg"));
if (imageWidth > 0 && imageHeight > 0) {
backgroundImage = Scalr.resize(backgroundImage, Scalr.Method.QUALITY, Scalr.Mode.FIT_EXACT, imageWidth, imageHeight, Scalr.OP_ANTIALIAS);
}
imageIcon = new ImageIcon(backgroundImage);
} catch (IOException e) {
Main.getLogger().log(java.util.logging.Level.INFO, e.getMessage(), e);
}
}
public int getImageWidth() {
return imageWidth;
}
public int getImageHeight() {
return imageHeight;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(imageIcon.getImage(), 0, 0, imageWidth, imageHeight, this);
}
}
private class CharacterImage extends JComponent {
CharacterImage(int currentLevelNumber) {
}
}
}
Спасибо за ваше время.
1 ответ
Ответ в том, что ваш JPanel имеет BorderLayout по умолчанию, а его hgap и vgap не равны 0.
Ты нуждаешься в этом:
JPanel contentPanel = new JPanel(new BorderLayout(0,0));