2010-04-25 2 views
7

Je pratique mes capacités swing pour le test à venir, et fried m'a donné idée de dessiner signe de Biohazard comme ceci:Comment dessiner « Biohazard » avec balançoire

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

je pouvais dessiner les cercles Elipse2D, mais ensuite j'ai besoin de couper ces 3 triangles. Des idées comment je peux faire ça?

+11

Je sais que je suis d'être pointilleux, mais c'est le symbole de danger de rayonnement, non biohazard;) Bien que le symbole biohazard réel pourrait être un autre bon à essayer avec Swing si vous pratiquez. Il a beaucoup de cercles :) (http://en.wikipedia.org/wiki/File:Biohazard.svg). –

+1

@Rich Ce serait un très bon concours de codage pour SO :) –

+0

@Chris: J'ai implémenté le vrai biohazard mais je ne pense pas que ce soit le bon endroit pour le mettre .. – bragboy

Répondre

5

Vous pouvez utiliser Java2D et canvas pour cela. Les choses que vous utilisez sont: Cercle et Arc. Vous devriez avoir trois arcs avec 30 degrés.

J'ai essayé d'utiliser des graphiques simples sur le cadre.

Voici une tentative

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); 
      } 
     } 
    } 
} 

L'original un: code source se trouve à http://pastebin.com/HSNFx7Gq

enter image description here

1

Peut-être que c'est en fait assez facile (je ne sais pas comment l'API Swing gère les lignes). Tracez des lignes qui sortent du centre vers les points sur la circonférence d'un cercle, et sautez simplement ces parties pour le dessin au trait.

3

Vous pouvez utiliser la classe Arc2D pour dessiner chaque ligne en spécifiant les paramètres start et extent en degrés.