我不明白爲什麼在我的背景上繪製的圖片未在JFrame調整大小時調整大小。Java Swing:圖片大小不會更新調整大小
基本上我在這個框架內創建一個JFrame和一個JPanel。
然後我用創建另一個類的對象的方法「setBackground」設置我的背景圖片(動畫gif)。在這個名爲「ImagePanel」的新類中,我繪製圖片並在背景圖片上繪製另一個較小的圖片。結果是好的,除非我調整JFrame的大小。
背景圖片「跟隨」調整大小,而較小的圖片保留在開始點。我用paintComponent()繪製了兩張圖片,並且我在JFrame的寬度和高度的基礎上設置了圖片的尺寸,但它似乎不起作用。
我還添加了一個動作偵聽器,以偵聽JFrame上的調整大小。當它偵聽調整大小時,它會調用「repaint()」,但它不起作用(我也在JFrame和JPanel上嘗試了「revalidate()」,但都沒有成功)。
看起來,當你放大幾乎覆蓋所有屏幕的JFrame時,它有一個更新,在一個固定的點上,較小的圖片是「更新」但錯誤的方式,只有當JFrame非常大時。
這是代碼。該「GameWindow」類:
import java.awt.BorderLayout;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class GameWindow extends JFrame {
private JPanel mapPicture = new JPanel();
public GameWindow(){
super("WELCOME!!!");
setSize(768, 768);
addComponentListener(new ResizeListener(this));
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
setBackground();
setVisible(true);
}
private void setBackground() {
mapPicture = new ImagePanel("map.gif", this);
add(mapPicture, BorderLayout.CENTER);
mapPicture.setLayout(new BorderLayout());
}
public class ResizeListener implements ComponentListener {
private JFrame parentFrame;
public ResizeListener(JFrame parentFrame) {
this.parentFrame = parentFrame;
}
public void componentHidden(ComponentEvent e) {}
public void componentMoved(ComponentEvent e) {}
public void componentShown(ComponentEvent e) {}
public void componentResized(ComponentEvent e) {
repaint();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new GameWindow2();
}
});
}
}
這裏是「ImagePanel」類:
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ImagePanel extends JPanel {
private ImageIcon background;
private JFrame parentFrame;
private ImageIcon smallerImage = new ImageIcon(getClass().getResource("car.png"));
public ImagePanel(String imgPath, JFrame parentFrame) {
this.parentFrame = parentFrame;
background = new ImageIcon(getClass().getResource(imgPath));
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.drawImage(background.getImage(), 0, 0, getWidth(), getHeight(), this);
g2d.drawImage(smallerImage.getImage(), 119*((parentFrame.getWidth()/768)), 172*((parentFrame.getHeight())/768), 32*((parentFrame.getWidth())/768), 32*((parentFrame.getHeight())/768),this);
}
}
我不明白爲什麼小圖片不符合新的比例重繪。
PS:我不能使用佈局管理器來設置第二張圖片的位置,因爲我會在地圖上放置很多對象(並且可能會對它們進行動畫處理)。
哇!!!!!非常感謝你!!!我會把答案設置爲有用的,但不幸的是我沒有足夠的聲望..但我從來沒有想過這樣的事情,而且對我來說這也是一個荒謬的錯誤,我會尋找一個解釋,(我仍然在學習),但我想我永遠不會忘記這個錯誤(看到我在這個問題上度過的那些日子,而你的答案是直接和完美的)!謝謝vandale! – jackal992