当前位置: 首页 > 面试题库 >

需要Line2D装饰技巧-Graphics2D

杨甫
2023-03-14
问题内容

我通过Graphics2D绘图在JPanel上布置了Line2D和Arc2D对象。
您可以在“ 如何使像素完美的
Line2D-Graphics2D中 ” 这个问题上看到它的一部分。现在我要实现的是,我
想为所有Line2D和Arc2D对象创建两条平行的线和弧。
在视觉上,

当前绘制的法线2D和Arc2D,

到目前为止,我的想法

我可能可以通过创建两条不同的线并
从正常的线位置提供偏移+ gap和-gap 来实现此目的。但是,这会产生很多
我不想要的对象。

现在,可以像这样使我的法线变粗吗,

给他们一个边界,并从中删除中间部分?

有可能实现这一目标吗?如果是,请给我一些指导。

谢谢您的帮助。


问题答案:

Use a BasicStroke and draw it twice, thicker and thinner.

One line drawn twice

import java.awt.*;
import java.awt.image.*;
import java.awt.geom.*;
import javax.swing.*;

import javax.imageio.ImageIO;
import java.io.File;

class PaintThick {

    public static void main(String[] args) throws Exception {
        int size = 150;
        final BufferedImage bi = new BufferedImage(
            size,size,BufferedImage.TYPE_INT_RGB);
        Graphics2D g = bi.createGraphics();

        double pad = 20;
        Line2D.Double line1 = new Line2D.Double(
            pad,pad,(double)(size-pad),(double)(size-pad));
        int cap = BasicStroke.CAP_BUTT;
        int join = BasicStroke.JOIN_MITER;
        BasicStroke thick = new BasicStroke(15,cap,join);
        BasicStroke thinner = new BasicStroke(13,cap,join);

        g.setColor(Color.WHITE);
        g.fillRect(0,0,size,size);

        g.setColor(Color.BLACK);
        g.setStroke(thick);
        g.draw(line1);

        g.setColor(Color.WHITE);
        g.setStroke(thinner);
        g.draw(line1);

        ImageIO.write(bi,"png",new File("img.png"));
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JOptionPane.showMessageDialog(
                    null, new JLabel(new ImageIcon(bi)));
            }
        });
    }
}


 类似资料:
  • 问题内容: 基本上,我想知道为什么必须创建一个抽象装饰器类来实现(或扩展)某些接口(或抽象类)。为什么所有新的“装饰类”都不能简单地实现(或扩展)基本抽象对象本身(而不是扩展抽象装饰器类)? 为了更具体一点,我将使用设计模式书中涉及咖啡饮料的示例: 有一个称为的抽象组件类 简单的饮料类型,例如简单扩展 为了装饰饮料,创建了一个抽象类,该类扩展并具有 假设我们要添加“牛奶”调味品,将创建一个扩展 我

  • 问题内容: 假设我有一个名为的类,并且我想使用装饰器设计模式。如果我错了,请纠正我,但是要使其正常工作,我们需要创建一个装饰器类,例如,该类将保留对实例的引用,所有其他装饰器将对其进行扩展以添加功能。 我不明白为什么我们必须创建装饰器类而不是使用实例? 问题答案: 装饰器模式用于动态地(即在运行时)向对象添加功能。通常,在编写类时,对象将具有固定的功能。但是重要的一点是,对象的功能以对对象的客户端

  • 本文向大家介绍PHPer 需要了解的 5 个 Composer 小技巧,包括了PHPer 需要了解的 5 个 Composer 小技巧的使用技巧和注意事项,需要的朋友参考一下 Composer是新一代的PHP依赖管理工具。其介绍和基本用法可以看这篇《PHP管理依赖(dependency)关系工具 Composer 安装与使用》。本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方

  • 介绍 (Introduction) Line2D类在(x,y)坐标空间中声明线段。 类声明 以下是java.awt.geom.Line2D类的声明: public abstract class Line2D extends Object implements Shape, Cloneable 类构造函数 SN 构造函数和描述 1 protected Line2D() () 这是

  • 毕业没什么社会经验,找了好久的工作任然一无所获,不知道该怎么办,也不知道自己错在哪,成绩是那么优秀,以下是出国留学网小编为大家整理的关于面试的着装技巧,欢迎大家阅读,更多精彩内容请关注出国留学网. 男生面试着装上的技巧 1西服是不可缺的,并且西服要干净挺拔,千万不要穿着老爸以前皱巴巴的西服去面试,领带佩戴与西服相比较不要太夸张,皮鞋最好选择经典的黑色或者深的棕色也可以,给人以稳重大方的形象。 2面

  • 问题内容: 我正在使用pyqt5,并且有几种使用类似于以下代码的方法连接: 例如,其中: 此代码似乎在多个方案中干净利落地工作,而没有装饰用或做什么特别的吧。 我的问题是: 通过这种方式我会失去什么? 需要什么原因? 问题答案: 的主要目的是允许定义插槽的几个不同的重载,每个重载都具有不同的签名。进行跨线程连接时,有时也可能需要使用它)。但是,这些用例相对较少,并且在大多数PyQt应用中根本不需要