30/09/2018, 18:28
Click vào button thì chuyển ảnh trong Java swing như thế nào?
em có code sau:
public class NewClass2 extends JFrame implements ActionListener {
JButton button1;
JButton button2;
JLabel label;
public NewClass2() {
this.setSize(500, 400);
setLocation(500, 250);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
label = new JLabel();
add(label);
label.setSize(400, 300);
//HinhAnh("abc.gif");
setVisible(true);
button1 = new JButton("Next");
button2 = new JButton("Previous");
add(button1, "East", 0);
add(button2, "North", 0);
button1.addActionListener(this);
button2.addActionListener(this);
}
public static void main(String[] args) {
NewClass2 t = new NewClass2();
}
public void HinhAnh(String str) {
BufferedImage image = null;
try {
image = ImageIO.read(new File(str));
} catch (IOException ex) {
Logger.getLogger(NewClass2.class.getName()).log(Level.SEVERE, null, ex);
}
int x = label.getSize().width;
int y = label.getSize().height;
int ix = image.getWidth();
int iy = image.getHeight();
int dx = 0;
int dy = 0;
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));
label.setIcon(icon);
}
@Override
public void actionPerformed(ActionEvent e) {
String s[] = {"a25.jpg", "abc.gif", "agh.jpg", "down.jpg", "hacker.jpg", "picture.jpg"};
int i = -1;
JButton b = (JButton) e.getSource();
if(b == button1) {
if(i < s.length) {
i++;
this.HinhAnh(s[i]);
} else {
JOptionPane.showConfirmDialog(null, "Da het hinh anh", "Information", JOptionPane.INFORMATION_MESSAGE);
}
}
if(b == button2) {
if(i > 0) {
i--;
this.HinhAnh(s[i]);
}
}
}
}
em muốn khi click vào button thì nó chuyển sang ảnh khác… nhưng khi click thì nó lại ném ra ngoại lệ trong phương thức `HinhAnh… Em không hiểu tại sao ? Mong mọi người giúp…
Bài liên quan
Ngoại lệ được ném ra là gì? Ở dòng nào? Ném ra khi click vào button nào?
nó ném ra ngoại lệ thế này nè anh:
Truyền file path có bị sai không nhỉ?
em truyền file khi chạy ảnh thì được… nhưng khi nhấp vào nút button “Next” thì nó ko hiện ra ảnh kế tiếp mà nó lại ném ra ngoại lệ…
i lúc này đang là -1
Click vào button 2 trước thì nó vẫn là -1, thì s[-1] là sai rồi còn gì.
cái này e gán khi nào i > 0 mới lấy s[i]… nếu nhỏ hơn thì bỏ qua…
‘’’
‘’’
Hình như dùng BorderLayout thì thêm component vào phải như này chứ nhỉ?
Mình coi trong list method của Container ko thấy tham số thứ 2 là String
Hi, there are popular error. Null pointer exception
Because
It dont know what is str, so u should input exactly the path of images
example
Đúng như bạn trên đã nói , em nên dùng đúng đường dẫn đến file ảnh. Anh nghĩ để chắc chắn em nên tách phương thức hình ảnh ra , làm cho nó chạy trước đã rồi sau đó mới ghép vào, Exception của em là ko đọc được đầu vào , Nếu em muốn khai báo đường link như của em thì em phải bỏ trong thư mục resources thì nó mới nhận
Đúng rồi anh…Em bỏ hết file ảnh vào trong thư mục resources mà anh… nhưng nó vẫn không chạy… nhưng nếu em chạy từng file riêng thì lại dc… còn khi nhấp vào nút button thì nó lại ko dc… nó ném ra ngoại lệ…
em cứ làm như anh chỉ ở trên là sẽ đc. nhưng với đoạn code của em nó sẽ ra ảnh cuối cùng. Nhấn next nó k show tiếp đâu.
sao lạ vậy anh ? em nghĩ khi em click vào button thì nó mới chuyển ảnh, và như thế thì nó sẽ chuyển liên tiếp nhau… em ko hiểu tại sao lại ra ảnh cuối ?