图形 - 如何使用方法create(int x, int y, int width, int height)和translate(int x, int y)?

2023-12-20

我试图做我的计算机科学作业,但当我尝试使用以下方法时我陷入困境。

  1. public Graphics create(int x,int y,int width,int height)

    基于此 Graphics 对象创建一个新的 Graphics 对象,但具有新的平移和剪辑区域。

    参数:

    • x - x 坐标。
    • y - y 坐标。
    • width - 剪切矩形的宽度。
    • height - 剪切矩形的高度。
       
  2. public abstract void translate(int x,int y)

    将图形上下文的原点平移到当前坐标系中的点 (x, y)。

谁能解释并举例说明如何使用它们?

我正在尝试这样做..

public Graphics drawPlayer1()
{
    myPencil.up();
    myPencil.move(-620,300);
    myPencil.down();
    myPencil.fillCircle(20);
    myPencil.up();
    myPencil.move(-590,300);
    myPencil.drawString("Player1: " + player1);
    p1.create(-620,300,40,40);
    return p1;
}//end drawPlayer1

当涉及到 p1.create(-620,300,40,40); 时,它向我抛出了 nullPointerException;


我和安德鲁一起讨论这个,我从未使用过Graphics#create(int, int, int, int)。我确实用Graphics#create though.

基本上,创建方法将创建一个新的图形上下文,它是原始图形上下文的副本。这使您可以在不影响原始文件的情况下操作副本。如果您正在对无法(轻松)撤消的图形执行操作,这一点很重要。

将图形上下文简单“清零”到新位置。 Swing 绘制过程对其绘制的每个组件执行此操作。基本上之前paint被调用时,图形上下文被转换到组件位置,这意味着组件内的所有绘制都是从 0x0 开始完成的

public class TestGraphics01 {

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

    public TestGraphics01() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception ex) {
                }

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

    public class TestGraphicsPane extends JPanel {

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

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            FontMetrics fm = g.getFontMetrics();

            // This creates a "copy" the graphics context, it's translated
            // to the x, y position within the current graphics context
            // and has a width and height.  If the width or height is outside
            // the current graphics context, then it is truncated...
            // It's kind of like clip, except what ever you do to this copy
            // does not effect the graphics context it came from...
            // This would be simular to setting the clipping region, just it 
            // won't effect the parent Graphics context it was copied from...
            Graphics create = g.create(100, 100, 200, 200);
            create.setColor(Color.GREEN);
            create.fillRect(0, 0, 200, 200);
            create.setColor(Color.YELLOW);
            create.drawString("I'm inside...", 0, fm.getAscent());
            create.dispose();

            // But I remain uneffected...
            g.drawString("I'm outside...", 0, fm.getAscent());

            // I will effect every thing draw afterwards...
            g.setColor(Color.RED);
            int y = 50 - (fm.getHeight() / 2) + fm.getAscent();
            g.translate(50, y);
            g.drawString("I'm half way", 0, 0);
            // You must reset the translation if you want to reuse the graphics OR
            // you didn't create a copy...
            g.translate(-50, -y);

            y = 350 - (fm.getHeight() / 2) + fm.getAscent();
            g.translate(300, y);
            g.drawString("I'm half way", 0, 0);
            // You must reset the translation if you want to reuse the graphics OR
            // you didn't create a copy...
            g.translate(-300, -y);

        }

    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

图形 - 如何使用方法create(int x, int y, int width, int height)和translate(int x, int y)? 的相关文章

随机推荐

  • Laravel - 动态创建表(无需迁移)

    我正在尝试根据管理员请求动态创建一个表 虽然它看起来应该像大多数 Laravel 文档一样简单 但我似乎无法create一张桌子 尽管我可以删除表格 并根据需要添加或删除列 这是我的基本代码模型 use Illuminate Databas
  • 测试项目在 TeamCity -> NUnit 阶段不读取 app.config

    我们正面临着一个奇怪的问题 即 JetBrains TeamCity 在我们的主项目上引发的单元测试 其中少数库项目的测试经常失败 显然 它没有读取配置文件 来自 app config 并很好地存储在项目 gt bin gt 调试 gt p
  • 在 Java 8 中从流创建多值映射

    有没有办法优雅地初始化和填充多值Map
  • 是否可以在 CSS3 选择器中使用 CSS 变量?

    我正在尝试使用 CSS 变量进行一些实验 但我无法让它工作或找到任何有关它的文档 有谁知道是否可以在 CSS3 选择器中使用 CSS var 我做了下面的例子来解释我想做的事情 此示例仅适用于 Chrome JSFIDDLE http js
  • SAS 中的退出与运行语句

    在 SAS 中 退出 和 运行 有什么区别 声明 我不知道何时使用 退出 以及何时使用 运行 例如 为什么是proc datasets using quit but proc contents using run 这可以追溯到 SAS 曾经
  • travis CI 中跳过了 SonarQube Scanner 分析

    有谁知道 SonarQube 扫描仪分析可能被跳过的原因是什么 sonar scanner X Dsonar host url https sonarqube com Dsonar login SONAR TOKEN 08 59 10 16
  • XCode 6.0.1 上的 Apple Mach-O 链接器错误

    我已将 XCode 更新到 6 0 1 在此更新之前 我能够在模拟器和我的设备中构建我的项目 但现在 它给了我Apple Mach O 链接器错误 我冲浪了很多 我已删除 DerivedData 文件夹 仍然有问题 我正在构建一个 Phon
  • 我试图让 UILabel 在 UIScrollView 内部滚动,但它不滚动

    这是我的 m 中 void viewDidLoad super viewDidLoad self scrollView addSubview self contentView self scrollView contentSize self
  • 在“数据工厂”模式下启用发布

    我已在 Azure 数据工厂上启用 Git 我也创建了我的 Git 存储库 当我想创建一个新的管道时 我收到以下消息 您已在数据工厂中启用 GIT 数据工厂 模式下的发布已禁用 请切换回 GIT 模式以进行进一步更改 当我想选择 GitHu
  • CSS伪元素::before(2); :之前和:之前

    我正在使用 css 并且尝试在我的 div 中添加一个元素 之前 就像箭头一样 有什么办法可以实现吗 我尝试了伪 before 但有三个 before 2 before 和 before 它们让我很困惑 它们之间有什么区别 The 内容的
  • Ruby 中检查变量是否为字符串

    还有比下面更惯用的吗 foo class String 我想你正在寻找instance of is a and kind of 将为派生类的实例返回 true class X lt String end foo X new foo is a
  • 如何更改密码框的屏幕键盘

    我有一个盒子 我想要输入仅由数字组成的密码 例如 ATM 卡 PIN 码 最好的方法是什么 要求 密码 带有隐藏数字 输入数字作为默认 唯一 键盘 我尝试过的 我认为 InputScopes 是可行的方法 但我无法在密码框中设置输入范围 我
  • 正则表达式选择标签之间的所有文本

    选择 2 个标签之间的所有文本的最佳方法是什么 例如 所有 之间的文本 pre 页面上的标签 您可以使用 pre pre 用您想要的任何文本替换 pre 并提取第一组 对于更具体的指令 请指定一种语言 但这假设您有非常简单且有效的 HTML
  • Git - 如何查找目录中所有项目的所有“未推送”提交?

    我终于习惯了 Git 在最初的陡峭学习曲线之后 我必须说它非常好 我只是怀念单个文件外部 但那是另一个故事了 然而 我有一个无法解决的问题 我目前正在同时处理十几个项目 它们都是相互关联的 我必须从一个跳到另一个 到处做出改变 到目前为止一
  • 带有无效证书的自定义 NuGet feed

    如何使用 nuget 命令禁用 SSL 证书检查 PS C 软件 gt nuget exe 列表 无法加载服务索引 来源https asd ca api feeds https asd ca api feeds 一个错误 发送请求时发生 底
  • 使用 ManyToMany 的 TomEE + OpenJPA 不起作用

    我认输了 我不明白 这能有多难 我有两个实体User and Group 具有多对多关系 Group管理关系 所以在Group I have Entity Table name GROUPS catalog schema GROUPADMI
  • 使用 OpenCV 从相机捕获灰屏

    我在从网络摄像头 内置 hp dv5 捕获图像时遇到问题 唯一的结果是灰屏 这是代码 include StdAfx h include cv h include highgui h include
  • 是否可以自动化 ClickOnce 部署?

    我从事的项目由服务器和通过 ClickOnce 部署的客户端应用程序组成 客户端在用户第一次单击时安装http 文件 应用程序 http file application链接 并且安装过程中与用户的交互很少 只是标准的 ClickOnce
  • 正确使用 Apache HttpClient 以及何时关闭它。

    我在 servlet 中使用 HttpClient 来调用资源 在进行一些操作后我将其作为 servlet 响应返回 我的 HttpClient 使用 PoolingHttpClientConnectionManager 我像这样创建客户端
  • 图形 - 如何使用方法create(int x, int y, int width, int height)和translate(int x, int y)?

    我试图做我的计算机科学作业 但当我尝试使用以下方法时我陷入困境 public Graphics create int x int y int width int height 基于此 Graphics 对象创建一个新的 Graphics 对