Рисование пунктирной линии в java
моя проблема в том, что я хочу нарисовать пунктирную линию на панели, я могу это сделать, но он рисует мою границу в пунктирной линии, а также, что о боже!
может кто-нибудь объяснить, почему? Я использую paintComponent для рисования и рисования прямо на панели
это код для рисования пунктирной линии:
public void drawDashedLine(Graphics g, int x1, int y1, int x2, int y2){
        Graphics2D g2d = (Graphics2D) g;
        //float dash[] = {10.0f};
        Stroke dashed = new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{9}, 0);
        g2d.setStroke(dashed);
        g2d.drawLine(x1, y1, x2, y2);
    }
            3 ответов
вы изменяете Graphics экземпляр передают в paintComponent(), который также используется для рисования границ.
вместо этого сделайте копию Graphics экземпляр и используйте это, чтобы сделать свой рисунок:
public void drawDashedLine(Graphics g, int x1, int y1, int x2, int y2){
        //creates a copy of the Graphics instance
        Graphics2D g2d = (Graphics2D) g.create();
        //set the stroke of the copy, not the original 
        Stroke dashed = new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[]{9}, 0);
        g2d.setStroke(dashed);
        g2d.drawLine(x1, y1, x2, y2);
        //gets rid of the copy
        g2d.dispose();
}
вы изменили контекст графики, установив ход и последующие методы, такие как paintBorder() используйте тот же контекст и, таким образом, наследуйте все внесенные вами изменения.
устранение: клонируйте контекст, используйте его для рисования и затем утилизируйте.
код:
// derive your own context  
Graphics2D g2d = (Graphics2D) g.create();
// use context for painting
...
// when done: dispose your context
g2d.dispose();
другой возможностью было бы сохранить значения, используемые в локальных переменных swap (Ex. Цвет, ход etc...) и установите их обратно в режим on use Graphics.
что-то типа :
Color original = g.getColor();
g.setColor( // your color //);
// your drawings stuff
g.setColor(original);
это будет работать для любого изменения, которое вы решите сделать с графикой.