如何恢复BasicStroke类中的默认描边?

4

我有一个程序,其中我定义了一堆新的虚线模式,并使用BasicStroke类将它们转换为笔画。然后我使用.setStroke()方法并使用我的虚线模式绘制线条。现在我想能够将setStroke()返回到默认的虚线模式(实线)。我该怎么做?以下是我的代码:

    float[] dash1 = {2f, 0f, 2f};
        float[] dash2 = {1f, 1f, 1f};
        float[] dash3 = {16f, 10f, 4f, 10f};
        float[] dash4 = {4f, 4f, 1f};

        Graphics2D g2d = (Graphics2D) g.create();
        g2d.drawLine(20, 40, 250, 40);

        BasicStroke bs1 = new BasicStroke(1, BasicStroke.CAP_BUTT,
                BasicStroke.JOIN_ROUND, 1.0f, dash3, 0f);

        BasicStroke bs2 =new BasicStroke(1, BasicStroke.CAP_BUTT,
                BasicStroke.JOIN_ROUND, 1.0f, dash3, 16f);

        BasicStroke bs3 = new BasicStroke(1, BasicStroke.CAP_BUTT,
                BasicStroke.JOIN_ROUND, 1.0f, dash3, 2f);

        BasicStroke bs4 = new BasicStroke(1, BasicStroke.CAP_BUTT,
                BasicStroke.JOIN_ROUND, 1.0f, dash4, 2f);



        g2d.setStroke(bs1);
        g2d.drawLine(20, 80, 250, 80);

        g2d.setStroke(bs2);
        g2d.drawLine(20, 120, 250, 120);

        g2d.setStroke(bs3);
        g2d.drawLine(20, 160, 250, 160);

        g2d.setStroke(bs4);
        g2d.drawLine(20, 200, 250, 200);

1
你不能只是存储g2d.getStroke()返回的Stroke并在最后将其设置回来吗? - StanislavL
+StanislavL,我不明白你的意思。你能给我一个代码行的例子吗? - Ashwin Gupta
@StanislavL 抱歉,我错标记了你(就像 YouTube 一样 LOL),请阅读上面的评论。 - Ashwin Gupta
1个回答

8
你可以将它存储在一个变量中,之后像@StanislavL所说的那样访问它。
    Stroke defaultStroke;

    Graphics2D g2d = (Graphics2D) g.create();

    defaultStroke = g2d.getStroke();
    //
    //do your thing
    //
    //reset by
    g2d.setStroke(defaultStroke);  

根据 OP 所做的事情,如果他们已经创建了原始“Graphics”上下文的副本,他们可以只调用 g2d.dispose() 并创建一个新的副本,如果他们想要做其他事情。 - MadProgrammer
好的,谢谢Madhan,那正是我所需要的。@MadProgrammer 也谢谢你,将来知道这一点很好,但对于这个特定的程序,我想保留当前的副本。 - Ashwin Gupta
你可以接受它作为答案,因为它解决了你的问题,这样对其他人有帮助,不会浪费他们的时间来回答你的问题。 - Madhan
抱歉 @Madhan,完全是我的错。我以为我已经接受了它,但可能是我忘记了。现在已经处理好了。对此真的很抱歉,再次感谢您的答复! - Ashwin Gupta

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