2009-02-05 37 views
5

Làm cách nào để tạo giao diện Swing một nút hình ảnh chuyển đổi? Tôi có hai hình ảnh, imageon.jpg và imageoff.jpg, và về cơ bản tôi muốn có một phần tử có thể nhấp để chuyển đổi hình ảnh và kích hoạt một sự kiện.Java: Hình ảnh làm nút chuyển đổi

Cập nhật: Có cách nào để ghi đè 'chrome' thông thường xung quanh hình ảnh không? Tôi thích một hình ảnh đơn giản hơn cho một nút có hình ảnh bên trong.

Trả lời

10

Tải hình ảnh với ImageIcon. Tạo một số JToggleButton. Sau đó, áp dụng các biểu tượng với AbstractButton.setIcon/setPressedIcon/setSelectedIcon. Xóa đường viền với AbstractButton.setBorderPainted(false).

+2

Mmm, quên những phương pháp đó. (Và chúng không xuất hiện trong Javadoc trừ khi bạn nhớ chúng tồn tại.) +1 –

+2

thực sự lạ ... tôi cũng đã cố làm cho borderpainted thành false nhưng vẫn có đường viền trên ảnh, cũng không phải chuyển đổi. Làm thế nào để giải quyết nó? :( – gumuruh

3

Làm thế nào về JToggleButton? Bạn có thể phân lớp và ghi đè lên paint() để vẽ hình ảnh chính xác dựa trên hình ảnh được chọn hay không.

Một cách khác sẽ là phân lớp JPanel và bắt nhấp chuột, ghi đè paintComponent() để vẽ hình ảnh chính xác. Bằng cách này, thứ duy nhất được vẽ là hình ảnh thực tế (không giống như tùy chọn JToggleButton).

+0

Cảm ơn mẹo JPanel! Tôi tìm thấy tài nguyên này, hy vọng nó dạy tôi xây dựng những gì tôi cần: http://java.sun.com/docs/books/tutorial/uiswing/painting/index.html – Dan

1

Đặt cược tốt nhất của bạn là phân lớp AbstractButton và đặt thuộc tính như đường viền và nền (trong hàm tạo của bạn).

MyButton() { 
    setBorder(null); 
    setBackground(null); 
    } 
2

Tôi gặp vấn đề tương tự với JButtons. Hãy thử điều này:

result = new JButton(icon); 
result.setBorderPainted(false); 
result.setContentAreaFilled(false); 

width = icon.getIconWidth(); 
height = icon.getIconHeight(); 
result.setPreferredSize(new Dimension(width, height)); 

Cần đặt kích thước ưa thích để loại bỏ khoảng trống bổ sung xung quanh nút. Điều này làm việc cho tôi trên Windows 7 và Mac OS X 10.6.

Các vấn đề liên quan