2013-04-14 10 views
5

folgenden Gegeben:Zeichnung eine fette Linie mit drawLine() beim Ausfahren Leinwand

public class NavigationCanvas extends Canvas implements MouseListener,MouseMotionListener,KeyListener { 

    public void paint(Graphics g) 
    { 

     // some code 
     // more 
     // ... 

     g.setColor(Color.black); 

     // drawing each Line 
     for (int i=0; i<length; i++) 
     { 
      Line2D currLine = m_lines.get(i); 

      g.drawLine((int)currLine.getX1(),(int)currLine.getY1(), 
       (int)currLine.getX2(),(int)currLine.getY2()); 
      g.drawLine((int)currLine.getX1()+1,(int)currLine.getY1()+1 
       ,(int)currLine.getX2()+1,(int)currLine.getY2()+1); 
      g.drawLine((int)currLine.getX1()+2,(int)currLine.getY1()+2 
       ,(int)currLine.getX2()+2,(int)currLine.getY2()+2); 
     } 


    }  
    ... 
} 

Wenn ich die Zeilen currLine zeichne ich diese:

enter image description here

Wie Sie sehen können, Ich machte 3 Anrufe zu drawline(), um es fett zu machen, aber es immer noch nicht ganz wie ich wollte.

Wie kann ich eine fettgedruckte Linie zeichnen?

+0

Sie fillPolygon – Justin

+0

Siehe Methode fillPolygon verwenden: [Grafik] (http://docs.oracle.com/javase/6 /docs/api/java/awt/Graphics.html) – Justin

Antwort

6

Graphics2D#setStroke steuert die Art der Linie, die gezeichnet wird. BasicStroke ist die Standardimplementierung von Stroke und hat eine Reihe von Parametern, an denen Sie am meisten interessiert sind, ist die Breite.

enter image description here

import java.awt.BasicStroke; 
import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class TestStroke { 

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

    public TestStroke() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 
      Graphics2D g2d = (Graphics2D) g.create(); 

      int width = getWidth(); 
      int height = getHeight(); 

      int xDif = width/4; 
      int yDif = height/4; 

      g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); 
      g2d.drawLine(xDif, yDif, width - xDif, yDif); 
      g2d.setStroke(new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); 
      g2d.drawLine(width - xDif, yDif, width - xDif, height - yDif); 
      g2d.setStroke(new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); 
      g2d.drawLine(width - xDif, height - yDif, xDif, height - yDif); 
      g2d.setStroke(new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); 
      g2d.drawLine(xDif, height - yDif, xDif, yDif); 

      g2d.dispose(); 
     } 

    } 

} 

Werfen Sie einen Blick auf Stroking and filling Graphics Primitives um weitere Informationen zu

+0

Sehr geschätzt. – ron