Gần đây tôi đã đọc chủ đề này (Creating a custom button in Java) về cách tạo các nút tùy chỉnh trong java bằng cách mở rộng lớp JButton, tuy nhiên tất cả các giải pháp về chủ đề này sử dụng đồ họa được vẽ trong java.Làm thế nào để tạo một JButton tùy chỉnh trong java với một cơ sở hình ảnh?
Tôi muốn có nút của mình dựa trên hình ảnh nút mà tôi đã vẽ trong photoshop. Vì vậy, tôi đã cố gắng áp dụng những gì tôi đọc trong chuỗi đó với kết quả này:
import javax.swing.*;
import java.awt.*;
public class nextButton extends JButton {
@Override
protected void paintComponent(Graphics g) {
Image image = new ImageIcon("nextButton.png").getImage();
g.drawImage(image,0,0,this);
}
@Override
public Dimension getPreferredSize() {
Dimension size = super.getPreferredSize();
size.setSize(75, 150);
return size;
}
}
Khi tôi chạy chương trình chính đã thêm nút này vào JPanel nó không hiển thị. Tôi cho rằng đó có thể là một trong nhiều lý do:
a) Kích thước của JButton không khớp với hình ảnh? b) Tôi chưa tải hình ảnh đúng cách. Trong các ghi chú, giảng viên của tôi đã cho tôi viết mã hình ảnh hiển thị chỉ với "imageName.png" không có đường dẫn tệp nên tôi không biết đây có phải là cách chính xác hay không, hoặc chương trình sẽ biết cách tải hình ảnh như thế nào . c) Cái gì khác ngoài kiến thức của tôi cho đến nay.
Nếu có ai biết cách giải quyết điều này, tôi sẽ rất biết ơn.
Cảm ơn bạn rất nhiều!
một vài ý kiến, ít nhiều liên quan đến vấn đề của bạn: a) ghi đè paintComponent là bất hợp pháp b) không bao giờ _change_ bất cứ điều gì trong getter c) cụ thể, setSize được thực hiện bởi LayoutManager dù sao, sẽ không có hiệu ứng trong một ứng dụng sane d) nó là chính xác để ghi đè getPreferredSize và trả về một gợi ý kích thước hợp lý, dựa trên nội bộ của thành phần, ở đây có thể là kích thước của hình ảnh e) tải hình ảnh trong sơn (không có nâng nặng bao giờ hết trong chu kỳ sơn!), thay vì tải nó một lần tại thời điểm xây dựng – kleopatra
btw, hãy tìm hiểu quy ước đặt tên java và gắn bó với chúng – kleopatra