2011-02-04 26 views
51

Tôi muốn sử dụng hình ảnh như một nút trong Java, và tôi đã cố gắng để làm điều này:Java: sử dụng một hình ảnh như một nút

BufferedImage buttonIcon = ImageIO.read(new File("buttonIconPath")); 
button = new JButton(new ImageIcon(buttonIcon)); 

Nhưng điều này vẫn cho thấy nút thực tế đằng sau những hình ảnh, tôi sẽ chỉ thích hình ảnh hoạt động như nút, làm cách nào tôi có thể thực hiện việc này?

Trả lời

26

Di biên giới như vậy:

button.setBorder(BorderFactory.createEmptyBorder()); 
.210

và sau đó cũng là nội dung :

button.setContentAreaFilled(false); 

: Taken từ dung dịch bổ sung vào câu hỏi của @ 3sdmx

+0

Loại này đã làm các trick, nhưng vẫn còn một số loại nền từ nút chính nó, là có một cách để hoàn toàn loại bỏ nó? Hoặc đặt nó trong suốt? – 3sdmx

+0

Bạn có thể thử đặt nền thành màu khác hoặc trong suốt. Hình ảnh của bạn có minh bạch hay là hình vuông vững chắc? – jzd

8

Đề xuất sẽ là đặt Hình ảnh làm nhãn và thêm người nghe chuột vào nhãn để phát hiện nhấp chuột.

Ví dụ:

ImageIcon icon = ...; 

JLabel button = new JLabel(icon); 

button.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mouseClicked(MouseEvent e) { 
    ... handle the click ... 
    } 
}); 
+0

Điều này phù hợp với hoàn cảnh của tôi. – SingleShot

0

Theo tôi biết, không có cách nào dễ dàng để làm việc đó, bạn sẽ cần phải ghi đè lên "paintComponent" phương pháp của lớp JButton để aint hình ảnh của bạn, nếu bạn chỉ muốn để hiển thị một hình ảnh và hoạt động giống như một nút, bạn có thể thêm một Mà JPanel vẽ hình ảnh (clicky) và thêm một MouseListener/MouseAdapter để xử lý các "mousePressed" sự kiện

1

buttonIcon.setBorder (EmptyBorder mới (0,0 , 0,0));

+0

Điều này vẫn vẽ những gì trông giống như một phiên bản rất nhỏ của biên giới nút, ít nhất là trên MacOS. – SingleShot

1
button.setBorderPainted(false); 
+0

Điều này vẫn vẽ đường viền/điền nút, ít nhất là trên MacOS. – SingleShot

1

Điều này có thể được thực hiện dễ dàng trong NetBeans bằng cách thiết lập contentAreaFilled tài sản False

1
BufferedImage buttonIcon = ImageIO.read(new File("myImage.png")); 
    button = new JButton(new ImageIcon(buttonIcon)); 
    button.setBorderPainted(false); 
    button.setFocusPainted(false); 
    button.setContentAreaFilled(false); 
1

chỉ cần viết này

button.setContentAreaFilled(false); 
0

Tôi đi theo các bước dưới đây và tôi có thể tạo ra một ' ImageButton 'thành công.

  1. Tạo một gia tăng JButton
  2. một người biết lắng nghe hành động
  3. Đặt biểu tượng hình ảnh (lưu ý tôi đã đặt vào biểu tượng info.png trong src \ thư mục resources \ chính và nạp sử dụng lớp loader). Cấu trúc dự án là như ở đây.Project folder structure
  4. Đặt rỗng Border
  5. tàn tật khu vực nội dung điền
  6. Disabled các focusability
  7. Thêm vào ContentPane

PFB mã mà làm việc cho tôi

JButton btnNewButton = new JButton(""); 
btnNewButton.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("Info clicked"); 
    } 
}); 

String iconfilePath = this.getClass().getClassLoader().getResource("info.png").getFile(); 
btnNewButton.setIcon(new ImageIcon(iconfilePath)); 
btnNewButton.setBounds(10, 438, 39, 31); 
btnNewButton.setBorder(BorderFactory.createEmptyBorder()); 
btnNewButton.setContentAreaFilled(false); 
btnNewButton.setFocusable(false); 
contentPane.add(btnNewButton); 

Các nút đầu ra kết quả từ mã trên là như dưới đây

enter image description here

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