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ó