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…

... viết 20:33 ngày 30/09/2018

Ngoại lệ được ném ra là gì? Ở dòng nào? Ném ra khi click vào button nào?

Phan Thành Nam viết 20:38 ngày 30/09/2018

nó ném ra ngoại lệ thế này nè anh:

... viết 20:31 ngày 30/09/2018

Truyền file path có bị sai không nhỉ?

Phan Thành Nam viết 20:34 ngày 30/09/2018

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ệ…

... viết 20:30 ngày 30/09/2018

public void actionPerformed(ActionEvent e) {
String s[] = {“a25.jpg”, “abc.gif”, “agh.jpg”, “down.jpg”, “hacker.jpg”, “picture.jpg”};
int i = -1;

i lúc này đang là -1

if(b == button2) {
if(i > 0) {
i–;
this.HinhAnh(s[i]);
}
}

Click vào button 2 trước thì nó vẫn là -1, thì s[-1] là sai rồi còn gì.

Phan Thành Nam viết 20:34 ngày 30/09/2018

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…
‘’’

if(b == button2) {
if(i > 0) {
i--;
this.HinhAnh(s[i]);
}
}

‘’’

... viết 20:34 ngày 30/09/2018

add(button1, “East”, 0);
add(button2, “North”, 0);

Hình như dùng BorderLayout thì thêm component vào phải như này chứ nhỉ?

this.add(button1, BorderLayout.East);
this.add(button2, BorderLayout.North);

Mình coi trong list method của Container ko thấy tham số thứ 2 là String

BigCat viết 20:34 ngày 30/09/2018

Hi, there are popular error. Null pointer exception
Because

image = ImageIO.read(new File(str)); // your  image still null

It dont know what is str, so u should input exactly the path of images
example

String s[] = {"D:\\Documents\\NetBeansProjects\\Temp\\src\\images\\a25.jpg");
Nguyễn Hữu Quyền viết 20:34 ngày 30/09/2018

Đú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

Phan Thành Nam viết 20:31 ngày 30/09/2018

Đú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ệ…

BigCat viết 20:35 ngày 30/09/2018

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.

Phan Thành Nam viết 20:33 ngày 30/09/2018

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 ?

Bài liên quan
0