你好,親愛的同胞計算器用戶一致,圓角並使其通過不同PLAFs
我有一個簡單的破解在那裏我得到一個JTextField
我早就想圓角。
我發現我能繼承的JTextField和覆蓋paintComponent(Graphics g)
在這方面,我可以編輯如下:
- 變化從標準的邊框邊境
BorderFactory.createEmptyBorder()
。 - 將文本字段的外觀從矩形更改爲圓角。
- 更改文本的偏移量,使其不在圓邊框附近。 (覆蓋
getInsets()
)
現在我有以下問題作鬥爭:
- 更改選擇大小
- 當USER改變PLAF到例如因此,Nimbus在
subclassed JTextField
上的外觀已被破壞,因此我的意思是Nimbus繪畫例程優於我的。所以我得到了混合Nimbus和我的圓形邊框。
所以在很短,是否有任何的你知道我有多解剖JTextField
用的各種問題,上面寫的?
寫是構造setBorder(BorderFactory.createEmptyBorder())
和setOpaque(false);
內使圓角邊框的自定義類的JTextField我的示例代碼:
@覆蓋
公共插圖的getInsets()
{
插圖插圖=超。的getInsets();
insets.left + = 10;
return insets;
} @Override
公共插圖的getInsets(插圖插圖)
{
返回插圖;
}
@Override
公共無效paintComponent(圖形克)
{
的Graphics2D G2 = Graphics2D的)g.create();
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.6f));
RoundRectangle2D.Float r2d = new RoundRectangle2D.Float(0,0,getWidth(),getHeight(),10,10);
Paint backgroundBrush = new GradientPaint(0,0,new Color(0x383838),0,getHeight(),new Color(0xCECECE).darker());
Shape oldClip = g2.getClip();
g2.setPaint(backgroundBrush);
g2.clip(r2d);
g2。fillRect(0,0,的getWidth() - 1,的getHeight() - 1);
g2.setClip(oldClip);
g2.setColor(Color.black);
g2.drawRoundRect(0,0,getWidth() - 1,getHeight() - 1,10,10);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,RenderingHints.VALUE_STROKE_PURE);
g2.dispose();
super.paintComponent(g);
}
這比[我認爲更容易](http://download.oracle.com/javase/tutorial/uiswing/components/border.html#custom)! – trashgod 2011-05-19 01:58:17
使用邊框時,無法控制JTextField內部的白色背景,至少不是我所知的 – 2011-05-31 13:23:41
@ user616693,這是通過使用textField.setBackground()完成的。 – camickr 2011-05-31 15:09:49