2014-03-27 124 views
1

我想縮放JCheckBox與其設置文字的字體大小相同。例如,當我增加Font大小的複選框本身保持很小,但它應該與文本增長或我想設置框的自己的尺寸:縮放JCheckBox框

JCheckBox chckbxTest = new JCheckBox("Test"); 
chckbxTest.setFont("Arial", Font.BOLD, 27)); 

如果可能的話,我需要爲JRadioButton相同的功能。不幸的是,我還沒有找到任何關於此功能的文檔。


解決方案:
被標記的答案幫助我建立一個完全可伸縮的自己風格JCheckBox的。

[...] 
    JCheckBox myCheckBox = new JCheckBox("Test"); 
    myCheckBox.setIcon(new SimpleCheckboxStyle(20)); 
    [...] 

class SimpleCheckboxStyle implements Icon { 

    int dim = 10; 

    public SimpleCheckboxStyle (int dimension){ 
     this.dim = dimension; 
    } 

    protected int getDimension() { 
     return dim; 
    } 

    public void paintIcon(Component component, Graphics g, int x, int y) { 
     ButtonModel buttonModel = ((AbstractButton) component).getModel(); 

     int y_offset = (int) (component.getSize().getHeight()/2) - (int) (getDimension()/2); 
     int x_offset = 2; 

     if (buttonModel.isRollover()) { 
      g.setColor(new Color(0, 60, 120)); 
     } else if (buttonModel.isRollover()) { 
      g.setColor(Color.BLACK); 
     } else { 
      g.setColor(Color.DARK_GRAY); 
     } 
     g.fillRect(x_offset, y_offset, fontsize, fontsize); 
     if (buttonModel.isPressed()) { 
      g.setColor(Color.GRAY); 
     } else if (buttonModel.isRollover()) { 
      g.setColor(new Color(240, 240, 250)); 
     } else { 
      g.setColor(Color.WHITE); 
     } 
     g.fillRect(1 + x_offset, y_offset + 1, fontsize - 2, fontsize - 2); 
     if (buttonModel.isSelected()) { 
      int r_x = 1; 
      g.setColor(Color.GRAY); 
      g.fillRect(x_offset + r_x + 3, y_offset + 3 + r_x, fontsize - (7 + r_x), fontsize - (7 + r_x)); 
     } 
    } 

    public int getIconWidth() { 
     return getDimension(); 
    } 

    public int getIconHeight() { 
     return getDimension(); 
    } 
} 
+0

不錯的動態解決方案。 – camickr

+0

什麼是你使用的'fontsize'變量?我試過你的代碼,字體大小初始化失蹤。然後我在構造函數中更改它以獲取暗淡的值,並且它工作正常。請讓我知道如果這是正確的做,或者如果字體大小意味着別的,並相應地編輯你的文章。儘管如此,你的代碼非常好,它幫助了我。 – Thanasis

回答

3

例如,當我增加字體大小複選框本身保持很小,但它應該與文本增長或我想設置的大小:檢查時,下面的示例繪製充滿了另一個矩形簡單的矩形的盒子我自己

然後你需要提供自定義圖標的字體大小的文字。請參閱類似的方法:

setIcon(....) 
setSelectedIcon(...) 

您需要對JRadioButton執行相同操作。另外,每個LAF都需要不同的圖標。

+0

+1我似乎誤解了這個問題。認爲這是關於整個組件的大小不只是圖標。 – dic19

+0

太好了,謝謝。正是我需要的。我在上面添加一個完整的例子 – alex