Hỏi về chèn ảnh trong java

Em có làm chèn hình ảnh được như này trong java:

  • Ảnh nền em chèn = 1 label
  • Ảnh các Empire em chèn vào cũng bằng label(có định tọa độ, kích thước = setBounds()) rồi set icon

Nhưng khi phóng to cái khung JFrame thì các Empire bị “lệch” khỏi vị trí :

Đây là đoạn

class Island extends JFrame implements ActionListener
{
    String str = "Town_hall_l.png";
    JButton[] button = new JButton[17];
    JButton button1,button2,button3,button4,button5,button6,button7,button8
            ,button9,button10,button11,button12,button13,button14,button15
            ,button16,button17;
    JLabel label,label1,label2,label3,label4,label5,label6,label7,label8,label9
            ,label10,label11,label12,label13,label14,label15,label16,label17;
    JPanel panel;
    Island()
    {
        super("Giao diện Island");
        panel = new JPanel();
        panel.setSize(800, 600);
        label = new JLabel();
       
        label.setLayout(null);
        add(label);
        try {
            BufferedImage image = ImageIO.read(new File("Island.jpg"));
            ImageIcon icon = new ImageIcon(image.getScaledInstance(800, 600, image.SCALE_SMOOTH));
            label.setIcon(icon);
        } catch (IOException ex) {
            Logger.getLogger(Island.class.getName()).log(Level.SEVERE, null, ex);
        }
        //Thiết lập ảnh của Empire 1
        button1 = new JButton();
        label1 = new JLabel();
        setCity(1,label1,button1,350,60,120);
        setImage("Town_Hall_1.png",label1,button1);
        
        //Thiết lập ảnh của Empire 2
        label2 = new JLabel();
        button2 = new JButton();
        setCity(2,label2,button2,590,100,160);
        setImage("Town_Hall_1.png",label2,button2);
        
        // 3
        label3 =new JLabel();
        button3 = new JButton();
        setCity(3,label3,button3,270,115,180);
        setImage("Town_Hall_1.png",label3,button3);
        
        //4
        label4 =new JLabel();
        button4 = new JButton();
        setCity(4,label4,button4,200,155,215);
        setImage("Town_Hall_1.png",label4,button4);
        
        //5
        label5 =new JLabel();
        button5 = new JButton();
        setCity(5,label5,button5,110,140,200);
        setImage("Town_Hall_1.png",label5,button5);
    }
    
    //Chỉnh tỉ lệ ảnh phù hợp với khung cua Jlabel
public void setImage(String s,JLabel labelx,JButton buttonx)
{
    try {
            BufferedImage image = ImageIO.read(new File(s));
            int x = labelx.getWidth();
            int y = labelx.getHeight();
            int ix = image.getWidth();
            int iy = image.getHeight();
            int dx,dy;
            if((x/y)>(ix/iy))
            {
                dy = y;
                dx = dy*ix/iy;
            }
            else
            {
                dx = x;
                dy = dx*iy/ix;
            }
            ImageIcon icon = new ImageIcon(image.getScaledInstance(dx,dy, image.SCALE_SMOOTH));
            labelx.setIcon(icon);
        } catch (IOException ex) {
            Logger.getLogger(Island.class.getName()).log(Level.SEVERE, null, ex);
        }
        buttonx.addActionListener(this);
}
public void setCity(int i,JLabel labelx,JButton buttonx,int x,int yl,int yb)
{
    label.add(labelx);
    labelx.setBounds(x, yl, 200, 70);
    buttonx.setText("Empire "+ i );
    label.add(buttonx);
    buttonx.setBounds(x, yb, 90, 18);
}

Cho em hỏi làm thế nào để khi zoom to hay thu nhỏ thì :

  • ảnh cũng zoom to lên
  • các Empire vẫn giữ nguyên vị trí tg đối của nó

Anh ơi cho e xin cái folder đó đi a
Mail của e là [email protected] e cần gấp á a

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?