首页
学习
活动
专区
圈层
工具
发布

【Java AWT 图形界面编程】Canvas 中绘制超大图片 ( 使用鼠标拖动查看全图 | 设置 JFrame 窗口自动关闭 | 获取并绘制图片 | 鼠标拖动计算位移 | 画布偏移 )

一、Canvas 中绘制超大图片要点 ---- 1、设置 JFrame 窗口自动关闭 创建 JFrame 窗口后 , 通过调用 JFrame#setDefaultCloseOperation 可以设置窗口自动关闭...; // 创建 JFrame 窗口 JFrame frame = new JFrame("Large Canvas"); // 设置窗口关闭行为 点击右上角关闭按钮...关闭窗口并退出应用 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 2、获取并绘制图片 在 AWT 中 , 使用 Toolkit.getDefaultToolkit...+= dy; } }); 4、画布偏移 初始时 , 画布偏移为 0 , 但是 在鼠标不断拖动的过程中 , 偏移量 ( offsetX , offsetY ) 一直在累加...窗口 JFrame frame = new JFrame("Large Canvas"); // 设置窗口关闭行为 点击右上角关闭按钮 关闭窗口并退出应用

2.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【错误记录】Java AWT 图形界面编程设置键盘事件没有响应 ( 设置键盘事件 | 键盘事件必须设置到 Frame JFrame 对象上 )

    一、报错信息 ---- 实现一个需求 , 按键 数字 按键 , 让 Canvas 画布中绘制的图像根据按下的数值进行缩放 ; 在 AWT 自定义 Canvas 组件中 , 添加按键事件 , 下面定义的...} } }); 出现问题的博客代码 : 【Java AWT 图形界面编程】使用小键盘按键缩放 Canvas 画布中绘制的背景图像...( 键盘按键监听 + 绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩放 + 以当前鼠标指针位置为缩放中心 示例 ) ; 二、解决方案 ---- 鼠标事件 , 可以添加到具体的 Component 组件上..., 但是凡是涉及到 键盘 的事件 , 必须添加到顶级组件 , 也就是窗口组件上 , 如 : Frame / JFrame 组件上 , 才能生效 ; 否则就会出现上述情况 , 为 组件设置的 KeyAdapter..., 即可实现想要的功能 ; JFrame.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e

    1.1K20

    【Java AWT 图形界面编程】使用小键盘按键缩放 Canvas 画布中绘制的背景图像 ( 键盘按键监听 + 绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩放 + 以当前鼠标指针位置为缩放中心 示例 )

    一、键盘按键监听 - 要点分析 ---- 如果要为 Java AWT 界面编程的应用设置键盘按键监听 , 必须为 Frame / JFrame 窗口设置键盘监听 , 为组件设置是无效的 ; 下面是设置键盘监听的核心代码...-- 在 【Java AWT 图形界面编程】Canvas 中绘制超大图片 ( 使用鼠标拖动查看全图 | 设置 JFrame 窗口自动关闭 | 获取并绘制图片 | 鼠标拖动计算位移 | 画布偏移 ) 博客中...本博客中实现的案例 , 在上面的基础上 , 添加了鼠标滚轮缩放的中心点设置为当前鼠标中心点 ; 1、代码示例 import javax.swing.*; import java.awt.*; import...窗口 JFrame frame = new JFrame("Large Canvas"); // 设置窗口关闭行为 点击右上角关闭按钮 关闭窗口并退出应用...frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 创建画布 LargeCanvas canvas = new

    3.8K20

    Data Structure_JavaSwing

    JFrame是最上层的一个窗口,如果要绘制的话是不可以在窗口本身绘制的。MenuBar就是最大化最小化关闭等等的操作。...Content Pane其实是一个容器,可以装载其他的组件,最常用的就是面板,Jpanel就是一个面板,后面的绘制都会画在Jpanel上。也就是说想要画上东西就需要在Jframe上加入Jpanel。...绘制 在Jpanel类里面有一个paintComponent方法,这个方法是自带的一个方法,需要绘制的操作都要在这里面画。paintComponent带了一个画笔参数。...cirle); //g.drawOval(50, 50, 300, 300); } } 如果想要设置颜色,就可以直接调用setColor即可,而这个条件会一直持续要后面结束为止...在我们视觉上就会看到闪烁了一下,有一个经典的解决方法,就是用双缓存,也就是两个画布,用画布的切换来演示动画的运行。

    75730

    【Java AWT 图形界面编程】使用鼠标滚轮放大缩小 Canvas 画布 ( 鼠标滚轮事件监听器 MouseWheelListener )

    } } 二、绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩放示例 ---- 在 【Java AWT 图形界面编程】Canvas 中绘制超大图片 ( 使用鼠标拖动查看全图 | 设置 JFrame 窗口自动关闭...| 获取并绘制图片 | 鼠标拖动计算位移 | 画布偏移 ) 博客中 , 绘制了超大图像 , 可以使用鼠标拖动 , 这里在上述基础上 , 新增鼠标滚轮缩放示例 ; 1、代码示例 代码示例 : import...g2.drawImage(image, 0, 0, this); } public static void main(String[] args) { // 创建 JFrame...窗口 JFrame frame = new JFrame("Large Canvas"); // 设置窗口关闭行为 点击右上角关闭按钮 关闭窗口并退出应用...frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 创建画布 LargeCanvas canvas = new

    3.7K30

    高级Swing 组件

    尤其是你添加值的时候,该列表更无法更新它的视图。 相反,你必须建立一个特定的模型,即DefaultListModel,将初始值填入该列表模型,然后将它与列表关联起来。...listData.elementAt(i); } }); } 这意味着,如果你在列表建立后修改了向量的内容,该列表在它被完全刷新之前,将会显示一个新值与旧值混合在一起的视图(上面的整个构造器中的final一词无法阻止你修改其他位置上的向量...但是,如果要显示一个图标的列表,实际上同样容易做到,你只需要传递一个填入了Icon对象的数组或向量即可。更加有意思的是,你可以非常容易地用你绘制的任何东西来代表你的列表值。...默认的绘制器 类型 绘制为 ImageIcon 图形 Boolean 复选框 Object 字符串 如果是其他类型的类,你可以提供你自己的单元格绘制器。...表格单元格绘制器与你在前面看到的树单元绘制器是类似的。

    1.3K10

    双缓冲原理在Awt和Swing中实现消除闪烁方法总结

    ---- 在游戏中相应的实现即主要窗体用Frame和JFrame来构建。...设置抗锯齿属性也会失效 Ps:问题到目前为止还没有很好的处理,可能相应的用JPanel进行绘制会解决问题(暂未尝试!)...update()—>paint(); 默认的upadate()中自带clearRect()方法,即清屏功能,程序运行时我们调用repaint()方法刷新则会造成屏幕刚清空,又继续重新调用paint()方法往窗体上绘制...,重绘函数只需要在截图的画布上绘制即可,不必在从底层绘制      paint(gre); //将接下来的图片加载到窗体画布上去,才能考到每次画的效果   g.drawImage...这也就是JFrame本身的一种处理方法。 但是我们用JFrame编程并且重新update()实现双缓冲后,窗体一样狂闪不停!原因为何? 下面引用一张图来说明: ?

    3.1K20

    从弧到多线段:深入解析 Java 中的弧度转多线段算法!

    无论是在游戏开发、CAD 系统还是图形用户界面中,弧的绘制与处理都非常重要。然而,计算机通常无法直接绘制出完美的弧线,因此需要通过将弧线近似为一系列直线段来进行绘制。这一过程被称为“弧度转多线段”。...代码解析:这段 Java 代码的目的是计算并打印一个圆弧上若干分割点的坐标。...计算后的坐标大致分布在右下角和右上角的圆弧上。代码的作用这个代码可以用于图形学中的圆弧绘制,或者任何涉及到圆弧分割的场景。3....太少的线段可能导致弧线的近似不够精确,导致视觉上出现明显的折线;而太多的线段又可能导致计算和绘制的性能问题。...frame = new JFrame("弧转多线段示例"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize

    2.2K22

    使用Java绘制五角星-GUI与控制台-双版本

    import javax.swing.*; import java.awt.*; public class Demo4 extends JFrame { public Demo4()...{ setTitle("Star Drawing"); setSize(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE...SwingUtilities.invokeLater(() -> { new Demo4(); }); } } 核心算法说明: 创建一个JFrame...变量)需要适当设置,太小会导致五角星变形 Bresenham算法是一种高效的直线绘制算法,但在字符网格上可能出现不连续的情况 边界检查很重要,防止数组越界异常 使用方法 GUI绘制方法 (Demo4.java...文件:javac Demo5.java 运行程序:java Demo5 程序会在控制台输出由’*'字符组成的五角星 程序执行完毕后自动退出 对学习Java的重要作用 面向对象编程实践:通过继承JFrame

    23810

    老Java程序员花一天时间写了个飞机大战,很舒服!

    代码实现 创建窗口 首先创建一个游戏窗体类GameFrame,继承至JFrame,用来显示在屏幕上(window的对象),每个游戏都有一个窗口,设置好窗口标题、尺寸、布局等就可以。.../* * 游戏窗体类 */ public class GameFrame extends JFrame { public GameFrame() { setTitle("飞机大战...不允许修改界面大小 } } 创建面板容器GamePanel继承至JPanel package main; import java.awt.Graphics; import javax.swing.JFrame...上 jmi1.addActionListener(this); jmi1.setActionCommand("Restart"); jmi2.addActionListener(this); jmi2...创建我方飞机 创建MyPlane类,属性有坐标x、y,宽高、图片、是否存活、是否可以移动等;方法主要有绘制、移动、射击等。

    71611

    贪吃蛇大作战java代码_java做贪吃蛇需要用到哪些知识

    -- 效果展示 ---- 目录 效果展示 一、游戏界面 二、得分情况 项目介绍 项目背景 总体需求 实现过程 代码展示 主类 :Demo类 MyPanel类 ①构造方法 ②初始化方法 ③绘制方法...实现过程 (1)绘制窗体对象。 (2)静态UI设计(包括小蛇,食物,游戏区域和标题区域)。 (3)使用键盘监听事件和定时器实现小蛇的移动。 (4)小蛇与食物碰撞的实现。...KeyEvent arg0) { // TODO Auto-generated method stub } } 框架Ui类 package Demo; import javax.swing.JFrame...; public class Ui { public static void main(String[] args){ JFrame frame=new JFrame("无尽版贪吃蛇");...---- 总结 本游戏的设计思路类似于游戏“贪吃蛇大作战”,程序在一些功能的实现上还存在许多不足,但该项目的实现对Java新手的实战能力有很大的提升。

    1.3K20
    领券