作成方法JButtonの拡張と丸いコーナー?
-
06-07-2019 - |
質問
これは持続の問題 "Javaの切Swing JButton".い検索のための拡張javax.swing.JButtonを継承すべての実行時の挙動及びオーバーライドで描画されました。
を使用することにより noah.w 月 サフォーラムページ 結果は以下のようなものです:
いことのできないのと同じ勾配を背景に、マウスの変更等は誰もが知っている。
コードを作成するにはJavaスイングウィンドウの画像:
public class XrButton extends JButton implements MouseListener {
private static final long serialVersionUID = 9032198251140247116L;
String text;
boolean mouseIn = false;
public XrButton(String s) {
super(s);
text = s;
setBorderPainted(false);
addMouseListener(this);
setContentAreaFilled(false);
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
if (getModel().isPressed()) {
g.setColor(g.getColor());
g2.fillRect(3, 3, getWidth() - 6, getHeight() - 6);
}
super.paintComponent(g);
if (mouseIn)
g2.setColor(Color.red);
else
g2.setColor(new Color(128, 0, 128));
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setStroke(new BasicStroke(1.2f));
g2.draw(new RoundRectangle2D.Double(1, 1, (getWidth() - 3),
(getHeight() - 3), 12, 8));
g2.setStroke(new BasicStroke(1.5f));
g2.drawLine(4, getHeight() - 3, getWidth() - 4, getHeight() - 3);
g2.dispose();
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().setLayout(new FlowLayout());
XrButton xrButton = new XrButton("XrButton");
JButton jButton = new JButton("JButton");
frame.getContentPane().add(xrButton);
frame.getContentPane().add(jButton);
frame.setSize(150, 150);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
mouseIn = true;
}
public void mouseExited(MouseEvent e) {
mouseIn = false;
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
解決
として名前が上がっていた2つの選択肢はこちら
1.実施図面だけではpaintメソッドのお部品
2.新しいButtonUI用できます。この場合にいるのに使用共に歩んLAF
場合に描きない場合がごresposibility
他のヒント
最良の実施からの丸いボタンスイングの物質のlook:
https://substance.dev.java.net/
ないすべてのテーマには四捨五入のボタンで変更が必要となるのがデフォルトのデモ.のプロジェクトがオープンソースであ魅ためのコードの一部のアイデア。
してしまい、申し訳なく思い出して、その結(金属LAF。)
@Override
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHints(new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON));
Shape firstClip = g.getClip();
RoundRectangle2D rect = new RoundRectangle2D.Double();
double arc = Math.ceil(getSize().getHeight()/3);
rect.setRoundRect(0, 0, Math.ceil(getSize().getWidth()), Math.ceil(getSize().getHeight()), arc, arc);
Area secondClip = new Area(getBounds());
secondClip.subtract(new Area(rect));
Area finalClip = new Area(firstClip);
finalClip.subtract(secondClip);
g2.setClip(finalClip);
super.paintComponent(g2);
Color[] gradients;
if(getModel().isRollover())
{
gradients = new Color[] { new Color(184, 207, 229), new Color(122, 138, 153), new Color(184, 207, 229) };
}
else
{
gradients = new Color[] { new Color(122, 138, 153) };
}
for(int i = 0; i < gradients.length; i++)
{
arc -= 2;
g2.setColor(gradients[i]);
g2.drawRoundRect(i+1, i+1, (int)Math.ceil(getSize().getWidth()-2)-(i*2), (int)Math.ceil(getSize().getHeight()-2)-(i*2), (int)arc, (int)arc);
}
}
るようになります:http://i.stack.imgur.com/unZuc.png
すでに自分自身
- まず聞き取ることができると思い毎のような行動をとることがで使用されるボタンの状態などのコードは、mouseIn用いて変色)
- そしてすべてのシングル塗装の詳細に必要なものは、勾配すべきポイントのクラス
GradientPaint
に使用される描き勾配..
ようにして持っている心の様々なlook&feelは、そのソリューションのままのいずれの..
所属していません StackOverflow