我真的被困在如何编程这个.如何在Java中用半径绘制一个圆并围绕边缘指向?
我需要在具有半径的JFrame中绘制一个圆并围绕圆周指向.我可以在数学上计算如何找到边缘点的坐标,但我似乎无法编程圆.我目前正在使用Ellipse2D方法,但这似乎不起作用并且不返回半径,因为根据我的理解,它不从中心绘制圆而是使用高度和宽度从起始坐标绘制.
我当前的代码是在一个单独的框架上,但我需要将它添加到我现有的框架.
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
public class circle extends JFrame {
public circle() {
super("circle");
setSize(410, 435);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Panel sp = new Panel();
Container content = getContentPane();
content.add(sp);
setContentPane(content);
setVisible(true);
}
public static void main (String args[]){
circle sign = new circle();
}
}
class Panel extends JPanel {
public void paintComponent(Graphics comp) {
super.paintComponent(comp);
Graphics2D comp2D = (Graphics2D) comp;
comp2D.setColor(Color.red);
Ellipse2D.Float sign1 = new Ellipse2D.Float(0F, 0F, 350F, 350F);
comp2D.fill(sign1);
}
}
Run Code Online (Sandbox Code Playgroud) CALayer *sublayer = [CALayer layer];
/*sublayer.backgroundColor = [UIColor blueColor].CGColor;
sublayer.shadowOffset = CGSizeMake(0, 3);
sublayer.shadowRadius = 5.0;
sublayer.shadowColor = [UIColor blackColor].CGColor;
sublayer.shadowOpacity = 0.8;*/
sublayer.frame = CGRectMake(30, 100, 256, 256);
sublayer.contents = (id)[[UIImage imageNamed:@"moon.png"] CGImage];
[self.view.layer addSublayer:sublayer];
//self.view.backgroundColor = [UIColor blackColor];
//add moon mask
UIGraphicsBeginImageContextWithOptions(CGSizeMake(400, 400), YES, 1);
CGContextRef contextRef = UIGraphicsGetCurrentContext();
CGContextClearRect(contextRef, CGRectMake(0, 0, 400, 400));
CGContextSetRGBFillColor(contextRef, 1, 1, 1, 0.8);
CGContextSetRGBStrokeColor(contextRef, 0, 0, 0, 0.5);
CGRect ellipse = CGRectMake(50, 50, 128, 128);
CGContextAddEllipseInRect(contextRef, ellipse);
CGContextFillEllipseInRect(contextRef, ellipse);
CALayer* sublayer2 = …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个简单的自定义视图:有一个由弧路径显示的位图 - 从0deg到360deg.学位正在随着一些FPS而变化.
所以我使用重写onDraw()方法创建了一个自定义视图:
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
arcPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
canvas.drawArc(arcRectF, -90, currentAngleSweep, true, arcPaint);
arcPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, circleSourceRect, circleDestRect, arcPaint);
}
Run Code Online (Sandbox Code Playgroud)
arcPaint 初始化如下:
arcPaint = new Paint();
arcPaint.setAntiAlias(true);
arcPaint.setColor(Color.RED); // Color doesn't matter
Run Code Online (Sandbox Code Playgroud)
现在,一切都很棒,但是...整个视图中的背景是黑色的.
如果我设置canvas.drawColor(..., PorterDuff.Mode.DST)并省略canvas.drawBitmap()- 在透明背景上正确绘制圆弧.
我的问题是 - 如何设置PorterDuff模式以使其与透明度一起工作?
当然bitmap是具有alpha通道的32位PNG.
有没有办法获得一个DrawingContext(或类似的)WriteableBitmap?也就是说允许你调用简单的DrawLine/ DrawRectangle/ etc类方法,而不是直接操作原始像素.
我有一个第三方组件,它要求我从位图给它bitsperpixel.
获得"每像素位数"的最佳方法是什么?
我的出发点是以下空白方法: -
public int GetBitsPerPixelMethod( system.drawing.bitmap bitmap )
{
//return BitsPerPixel;
}
Run Code Online (Sandbox Code Playgroud) 对于技术和非技术受众,我偶尔会被要求即兴进行白板(非虚拟)数据流,架构图等.不幸的是,我的绘画技巧(和易读性)非常糟糕.
如何才能更有效地做到这一点?我正在寻找关于标准符号和连接器使用的提示,一些组织和分类信息的标准方法(例如,泳道)等.
我可以练习什么才能变得更好?我希望这些视觉呈现能够有效地传达我的想法,而糟糕呈现的图表可以使这些想法显得错综复杂和不优雅,即使它们不是.
我想在Java中绘制图形(节点和边).但是,由于我不知道如何去做,我想在开始之前先给出一些建议.
我该怎么做?
使用Graphics2D包,对吗?
节点的标签怎么样?我应该使用drawString之类的东西并手动处理所有"居中"或为此创建一个JLabel吗?我可以在Graphics2D环境中放置JLabel吗?
我搜索过但没有找到任何简单的实现.如果您知道其中一个,请在答案中提供链接.
编辑:我正在寻找的解决方案应该能够删除节点,拖动节点,编辑标签,创建节点,所有这些都与鼠标事件.
谢谢.
我正在编写一个HTML5画布绘图应用程序,我需要能够判断在mousemove事件期间是否按下了鼠标左键.在Chrome上,这可行:
if (event.which == 1) { <do stuff> }
Run Code Online (Sandbox Code Playgroud)
但是在FireFox中,无论是否按下按钮,event.which 总是为1.
如何在mousemove事件期间检测鼠标按键是否被按下?
Mathematica绘制这样的东西(由Graphviz创建)是否可行且实用:

这是我能得到的最好的(但形状和风格并不令人满意):

码:
GraphPlot[{{A -> C, "go"}, {C -> B, "gone"}, {C -> D,
"went"}, {C -> C, "loop"}}, VertexLabeling -> True,
DirectedEdges -> True]
Run Code Online (Sandbox Code Playgroud)