2011-07-21 36 views
5

Tôi muốn thay thế văn bản trong danh sách nút radio bằng một biểu tượng.JRadioButton: cách thay thế văn bản bằng IconImage?

Tôi đã thử điều này:

rotateButton = new JRadioButton(rotateIcon.getImage()); 

Nhưng điều này thay thế các nút radio và văn bản bằng cách vào biểu tượng. Tôi muốn giữ nút radio và hiển thị hình ảnh.

Tôi nên làm gì?


Những gì tôi hiện đang nhận được là:

Enter image description here

Nhưng tôi muốn nó kết thúc với điều này:

Enter image description here

Trả lời

5
+2

+1 tốt đẹp. Tôi luôn thấy bạn trong gui-questions :) –

+0

@Eng. Fouad: Tôi cũng thấy anh ta trong hầu hết các câu hỏi Swing có vẻ như mKorble là một người đam mê swing. –

+0

@ Eng.Fouad vì có rất nhiều người vui vẻ, tốt bụng với peaceFullFaces và học tiếng Anh :-) khiến tôi khó hơn bất kỳ PL nào như tôi biết, – mKorbel

5

Tôi chỉ sao chép hành vi được mô tả bằng cách sử dụng nguồn này:

import java.awt.Image; 
import javax.swing.*; 
import javax.imageio.ImageIO; 
import java.net.URL; 

class RadioWithImage { 

    public static void main(String[] args) throws Exception { 
     URL url = new URL("http://www.gravatar.com/avatar/" + 
      "a1ab0af4997654345d7a949877f8037e?s=128"); 
     Image image = ImageIO.read(url); 
     final ImageIcon imageIcon = new ImageIcon(image); 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       JRadioButton radioButton = new JRadioButton("A.T.", imageIcon); 
       JOptionPane.showMessageDialog(null, radioButton); 
      } 
     }); 
    } 
} 

Where is the radio button 'selected' icon?

Nó có vẻ như một lỗi với tôi, mặc dù tôi không thể nhớ nhìn thấy một đài phát thanh với một biểu tượng. Họ phải trông như thế nào?


Thời gian để truy cập vào 'hộp hacks' của tôi.

import javax.swing.*; 

class RadioWithImage { 

    public static void main(String[] args) throws Exception { 
     String url = "http://www.gravatar.com/avatar/" + 
      "a1ab0af4997654345d7a949877f8037e?s=128"; 
     final String html = "<html><body><img src='" + 
      url + 
      "' width=128 height=128>"; 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       JRadioButton radioButton = new JRadioButton(html); 
       JOptionPane.showMessageDialog(null, radioButton); 
      } 
     }); 
    } 
} 

Radio Button with Image

Kỹ thuật này sẽ không hoạt động nếu:

  1. Việc sử dụng hợp cụ thể đòi hỏi các loại biểu tượng (ép, cuộn qua, lựa chọn, vv)
  2. Nút bị vô hiệu hóa (nó sẽ hiển thị không chính xác).
+0

trông giống như Java6 quên mất điều đó, nhưng tôi nghĩ rằng bạn đang ở đây một trong Htlm Gurus ... +1 – mKorbel

+0

@mKorbel Oh no! Tôi có thể có vẻ là một guru HTML cho các lập trình viên Java, nhưng với các nhà thiết kế web, tôi là một người mới. Nhưng cảm ơn vì đã nói điều đó. ;) Yours là một câu trả lời tốt bằng cách này, +1. Tôi thích câu trả lời bao gồm các liên kết đến JDocs mới nhất. :) –

+0

Tôi thực sự bối rối làm thế nào một cách nhanh chóng có thể mã hóa todays newbie – mKorbel

9

Tạo JRadioButton không có văn bản và đặt JLabel có hình ảnh bên cạnh. Bạn cũng có thể tạo một lớp để ẩn sự phức tạp.

import java.awt.event.ActionListener; 

import javax.swing.*; 
import javax.swing.event.ChangeListener; 

public class RadioButtonWithImage extends JPanel { 

private JRadioButton radio = new JRadioButton(); 
private JLabel image; 

public RadioButtonWithImage(Icon icon) { 
    image = new JLabel(icon); 
    add(radio); 
    add(image); 
} 

public void addToButtonGroup(ButtonGroup group) { 
    group.add(radio); 
} 

public void addActionListener(ActionListener listener) { 
    radio.addActionListener(listener); 
} 

public void addChangeListener(ChangeListener listener) { 
    radio.addChangeListener(listener); 
} 

public Icon getImage() { 
    return image.getIcon(); 
} 

public void setImage(Icon icon) { 
    image.setIcon(icon); 
} 

} // end class RadioButtonWithImage 
+0

+1 Đối với quyền ans @Eva – Krishna

3

Không có trình tạo nút radio cho phép hình ảnh làm đối số nội dung thay vì văn bản. Cách duy nhất để thay thế văn bản của một nút radio bằng một hình ảnh nó tạo ra html và truyền nó như một đối số cho hàm tạo mặc định.

import javax.swing.*; 

class RadioWithImage { 

    public static void main(String[] args) throws Exception { 
     URL url = Windows_ChordsGenerator.class.getResource("/images/img1.png"); 

     final String html = "<html><body><img src='" + url.toString() +"'>"; 

     JRadioButton radioButton = new JRadioButton(html);  
     } 
} 
+0

Câu trả lời hay! Điều này hữu ích hơn câu trả lời của @Andrew Thompson bởi vì nó sử dụng một hình ảnh thực sự đi kèm với bình, và không phải là một tài nguyên bên ngoài. –

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