Почему мое изображение не изменяется после нажатия максимизации/восстановленияJAVA

Программисты JAVA общаются здесь
Anonymous
Почему мое изображение не изменяется после нажатия максимизации/восстановления

Сообщение Anonymous »

Я хочу отобразить икониг на jlabel, на JPanel, в JlayeredPane, в jframe. Я написал подкласс для JlayeredPane (показан ниже), в котором я добавляю панель с меткой со значком изображения в него. Я переопределяю функцию Dolayout of Jlabel, поэтому изображение сохраняет свой рацион во время его изменения. Затем, когда я нажимаю снова (теперь это кнопка восстановления), кадр снова становится меньше, но изображение, похоже, занимает размер максимизированной кадра. Когда я просто снова перетаскиваю сторону кадра, он сразу же меняет размер изображения до, казалось бы, правильного размера. Я говорю, кажется, и, по-видимому, потому, что я считаю, что размер изображения отстает одно «изменение размера события» (не уверен, что это правильная терминология).package myPackage;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.SpringLayout;

public class GamePane extends JLayeredPane{

private BufferedImage worldImage = null;
private Image scaledWorldImage = null;
private ImageIcon worldIcon = new ImageIcon();
private final JLabel mapLabel;
private final JPanel bgPanel = new JPanel();
private final SpringLayout bgPanelLayout = new SpringLayout();

public GamePane() {
this.setBackground(Color.BLUE);
this.setOpaque(true);
bgPanel.setLayout(bgPanelLayout);
bgPanel.setOpaque(true);

try {
worldImage = ImageIO.read(new File("src/assets/world_map.png"));
//worldIcon = new ImageIcon(worldImage);
} catch (IOException e) {
e.printStackTrace();
}

int imHeight = worldImage.getHeight();
int imWidth = worldImage.getWidth();
double imRatio = (double) imHeight/ (double) imWidth;

mapLabel = new JLabel(worldIcon) {
private final double ratio = imRatio;

@Override
public void doLayout() {
super.doLayout();
if(getWidth() > 0 && getHeight() > 0) {
double height;
double width;
if(getHeight() < ratio*getWidth()) {
height = (double) getHeight();
width = height/ratio;
} else {
width = (double) getWidth();
height = width*ratio;
}
scaledWorldImage = worldImage.getScaledInstance(
(int) width,
(int) height,
Image.SCALE_DEFAULT);
worldIcon.setImage(scaledWorldImage);
revalidate();
repaint();
}
}
};

bgPanel.add(mapLabel);
bgPanelLayout.putConstraint(SpringLayout.NORTH, mapLabel, 0, SpringLayout.NORTH, bgPanel);
bgPanelLayout.putConstraint(SpringLayout.SOUTH, mapLabel, 0, SpringLayout.SOUTH, bgPanel);
bgPanelLayout.putConstraint(SpringLayout.EAST, mapLabel, 0, SpringLayout.EAST, bgPanel);
bgPanelLayout.putConstraint(SpringLayout.WEST, mapLabel, 0, SpringLayout.WEST, bgPanel);

this.add(bgPanel, JLayeredPane.DEFAULT_LAYER);

}

@Override
public void doLayout() {
super.doLayout();
bgPanel.setBounds(0, 0, this.getWidth(), this.getHeight());
}
}
< /code>
У меня есть какой -то базовый опыт Java, но я очень мало знаю о Jframes и тому подобном (но хотел бы узнать, это хобби -проект), поэтому я использовал много Catgpt, чтобы прийти в этот код. Если я делаю что -то действительно странное здесь (связано или не связано с проблемой, которую я описал), пожалуйста, дайте мне знать.

Подробнее здесь: https://stackoverflow.com/questions/797 ... store-down

Вернуться в «JAVA»