如何使用Swing绘制“生物危害”的图标

7

我正在为即将到来的考试练习我的挥杆技巧,Fried 给了我一个想法,可以画出这样的生化危险标志:

alt text http://img62.imageshack.us/img62/8372/lab6b.gif

我可以用 Elipse2D 画出圆圈,但是我需要切掉那三个三角形。有什么想法吗?


11
我知道我有点迂腐,但那是辐射危险标志,不是生物危险标志。虽然如果你在练习的话,实际的生物危险标志也可以尝试一下。它有许多圆圈 :) (http://en.wikipedia.org/wiki/File:Biohazard.svg)。 - Rich Adams
1
@Rich 那将是一个非常好的 SO 编程竞赛 :) - Chris Dennett
@Chris:我已经实现了真正的生化危机,但我不认为这是放置它的正确位置。 - bragboy
将其发布到Pastebin(http://pastebin.com/),然后给我们链接 :) - Chris Dennett
@Chris:嘿,请在http://pastebin.com/HSNFx7Gq找到它,我留下了外三角形的代码给读者。 :) 下面是屏幕截图。下面这个看起来不如SVG版本好看。但那是Java2D原始图形。 - bragboy
3个回答

5
您可以使用Java2D和画布来实现此功能。您可能会使用到的内容是圆形和弧形,应该有三个30度的弧形。
我尝试在框架上使用简单的图形。
以下是一种尝试。
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JComponent;
import javax.swing.JFrame;

public class Biohazard {
    public static void main(String[] args) {
        new Biohazard();
    }

    public Biohazard() {
        JFrame frame = new JFrame("Biohazard");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new MyComponent());
        frame.setSize(260, 280);
        frame.setVisible(true);
    }

    public class MyComponent extends JComponent {
        public void paint(Graphics g) {
            int height = 120;
            int width = 120;
            g.setColor(Color.yellow);
            g.fillOval(60, 60, height, width);
            g.setColor(Color.black);
            g.drawOval(60, 60, height, width);

            int swivels = 6;
            int commonx, commony, commonh, commonw;

            for(int i=0;i<swivels;i++){
                commonx = commony = 120-i*10;
                commonh = commonw = i*20;
                g.drawArc(commonx, commony, commonh, commonw, 60 , 60);
                g.drawArc(commonx, commony, commonh, commonw, 180 , 60);
                g.drawArc(commonx, commony, commonh, commonw, 300 , 60);
            }
        }
    }
}

您可以在此处找到源代码:http://pastebin.com/HSNFx7Gq
以下是图片示例:enter image description here

3
您可以使用Arc2D类,通过指定度数中的startextent参数来绘制每条线。

1
也许这实际上很容易(我不确定 Swing API 如何处理线条)。从中心绘制出到圆周上的点的线条,只需跳过那些用于线条绘制的部分即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接