2016-09-28 4 views
0

Я не могу понять, как получить «g.setStroke (новый BasicStroke (5)); для всех моих созданных фигур (в данном случае овалов).Рисование с Java: применение границ/контуров к фигурам

Мой код:

import java.awt.*; 
import java.awt.Color; 
import java.awt.Graphics2D; 
import java.awt.BasicStroke; 

public class Rings 
{ 
    public static void main(String[] args) 
    { 
     DrawingPanel panel = new DrawingPanel(300, 300); 

     Graphics2D g = panel.getGraphics(); 
     g.setStroke(new BasicStroke(5)); // Sets Outer Line Width of Shapes 
     g.setColor(new Color(255, 0, 0)); 
     g.fillOval(50, 50, 200, 200); // Large Oval 
     g.setColor(new Color(200, 0, 0)); 
     g.fillOval(100, 100, 100, 100); // Medium Oval 
     g.setColor(new Color(150, 0, 0)); 
     g.fillOval(125, 125, 50, 50); // Small Oval 
     g.setColor(new Color(100, 0, 0)); 
     g.fillOval(137, 137, 25, 25); // Tiny Oval 
    } 
} 

Мой выход:

My Output

Правильный выход:

Correct output

ответ

2

Инсульт не так важно, когда вы звоните fillOval но moreso, когда вы позвоните по телефону drawOval. Так что я рекомендую:

  • вызов fillOval, как вы делаете
  • После каждого fillOval, а затем изменить цвет на Color.Black (или любой другой цвет контура вы хотите), и вызвать drawOval.
  • Посмотрите, что произойдет с вашим рисунком, если вы минимизируете GUI и затем восстанавливаете его.
  • Именно по этой причине и для предотвращения ошибок NullPointerException мы не рекомендуем использовать объект Graphics, полученный посредством вызова getGraphics() компонента Swing. Такой объект Graphics недолговечен. Вместо этого сделайте так, как подсказки и большинство других подобных вопросов скажут вам: в правильном paintComponent переопределить внутри класса, который расширяет JPanel или JComponent.
+0

Есть ли способ изменить цвет обводки? – Aramza

+0

@Andrew: no, Stroke не имеет цвета - это не свойство Stroke. Вместо этого это свойство объекта Graphics, и вы меняете его так же, как вы уже это делаете. –

Смежные вопросы