Hỏi Về Chèn ảnh Trong Java - Programming - Dạy Nhau Học

image.jpg1366×768 426 KB

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í : image.jpg1366×768 307 KB

Đâ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ó

Từ khóa » Chèn ảnh Vào Java Swing