2010-03-11 77 views
0

我想要一組JRadioButton並在每個旁邊有一個'i'圖像,點擊後會打開一個包含單選按鈕旁邊文本信息的新窗口。什麼是最好的組件來對齊單選按鈕旁邊的小'i'標籤?帶有信息鏈接的JRadio按鈕

回答

1

有一些可能性與樣式做到這一點。

最簡單的一個顯然是把JButton加上你的單選按鈕旁邊的「我」圖像。使用正確的佈局管理器(當然是GridBagLayout)可以讓您輕鬆對齊。

另一個可能是在您的單選按鈕中設置客戶端屬性,然後讓您的單選按鈕渲染器(在look'n'feel中)使用此客戶端屬性來顯示按鈕旁邊的「我」圖標。不幸的是,這是一個有點難度最高的工具,因爲它要求您正確管理單選按鈕邊界以在需要時包含圖像(這也是在LnF中實現的,但並不容易找到)。

1

將您的圖像作爲javax.swing.ImageIcon傳遞給JRadioButton的構造函數。然後監聽鼠標點擊按鈕,並檢查鼠標指針的座標是否在圖像邊界內。

0

我發現類似JLabel的東西對於問題'i'部分的組件類型最有用。類似於所有組件的JLabels可以將鼠標監聽器添加到它們中,並且從那裏您可以獲得所需的訪問權限,以便在用戶單擊某個組件時觸發某些內容。

在下面的代碼中,我使用了一個簡單的FlowLayout,因爲如果您不喜歡使用GridBayLayout,您會覺得這是一種合乎邏輯的配合以提供水平對齊。最終它將取決於你如何設置你的佈局,但像FlowLayout這樣的東西有助於這些情況。

看爲一個例子,以下代碼:

public class Main { 
    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       final JFrame f = new JFrame(); 
       f.setLayout(new BorderLayout()); 
       f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       JPanel p = new JPanel(new FlowLayout()); 
       JLabel l = new JLabel(new ImageIcon(Main.class.getResource("info.png"))); 
       l.addMouseListener(new MouseAdapter(){ 
        @Override 
        public void mouseReleased(MouseEvent e) { 
         JOptionPane.showMessageDialog(f, "Clicked"); 
        } 
       }); 
       p.add(new JRadioButton()); 
       p.add(l); 

       f.add(p, BorderLayout.CENTER); 
       f.pack(); 
       f.setLocationRelativeTo(null); 
       f.setVisible(true); 
      } 
     }); 
    } 
}