【发布时间】:2019-01-08 07:19:49
【问题描述】:
也许我的情况是简单的想法混淆。如何使用 Shape 绘制这样的按钮?
我不介意圆角,这是我使用圆角按钮的方法。
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.RoundRectangle2D;
import javax.swing.AbstractButton;
import javax.swing.ButtonModel;
import javax.swing.JComponent;
import javax.swing.plaf.basic.BasicButtonUI;
public class PlayButtonUI extends BasicButtonUI{
protected Shape shape;
@Override
protected void installDefaults(AbstractButton b) {
super.installDefaults(b);
b.setOpaque(false);//removes that annoying default background
}
@Override public void paint(Graphics g, JComponent c) {
Graphics2D g2 = (Graphics2D)g;
AbstractButton b = (AbstractButton) c;
ButtonModel model = b.getModel();
drawButtonShape(b);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);//smoth borders
if(model.isArmed()) {
g2.setColor(Color.RED);//color when button is pressed
}else{
g2.setColor(Color.GREEN);//default button color
}
g2.fill(shape);//aplying color
super.paint(g2, c);
}
private void drawButtonShape(JComponent c) {
//button shape is drawn here, 16 are the border radius
shape = new RoundRectangle2D.Float(0, 0, c.getWidth()-1, c.getHeight()-1,16, 16);
}
}
我真的不知道怎么画,这门课是我在某个地方找到的一个混乱示例的结果,然后我自己简化了直到它起作用,我为重要的线条留下了一些 cmets。
我一直在寻找一段时间,并在 oracle 文档中找到了这个示例。 https://docs.oracle.com/javase/tutorial/2d/geometry/arbitrary.html
我真的不知道如何将 Graphics2D 转换为 Shape,如果我走错了路,请告诉我。
【问题讨论】:
-
This example 使用 shape API 生成圆角矩形样式的形状,它可能会给你一些想法
-
有趣,Area 似乎是缺失的部分。