首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在分配了新的变量(setter)并调用了paintComponent ()之后,无法更改重新绘制的输出

在Java的Swing库中,paintComponent()方法用于绘制组件的内容。如果你在分配了新的变量(setter)并调用了paintComponent()之后,发现无法更改重新绘制的输出,可能是由于以下几个原因:

基础概念

  • paintComponent(): 这是Swing组件中的一个方法,用于绘制组件的内容。它通常在组件需要重绘时被系统调用。
  • repaint(): 这是一个用于请求重绘组件的方法。它会标记组件为“需要重绘”,并在事件分发线程空闲时调用paintComponent()

可能的原因及解决方案

  1. 未调用repaint():
    • 原因: 直接调用paintComponent()并不会触发重绘,因为Swing的绘制机制是基于事件的。
    • 解决方案: 调用repaint()方法来请求重绘组件。
    • 解决方案: 调用repaint()方法来请求重绘组件。
  • paintComponent()中的逻辑问题:
    • 原因: 可能在paintComponent()方法中没有正确使用更新后的变量。
    • 解决方案: 确保在paintComponent()中使用的是最新的变量值。
    • 解决方案: 确保在paintComponent()中使用的是最新的变量值。
  • 线程问题:
    • 原因: Swing的所有UI操作都必须在事件分发线程(EDT)中进行。
    • 解决方案: 确保所有更新UI的操作都在EDT中进行。可以使用SwingUtilities.invokeLater()来确保这一点。
    • 解决方案: 确保所有更新UI的操作都在EDT中进行。可以使用SwingUtilities.invokeLater()来确保这一点。
  • 组件重绘区域问题:
    • 原因: 如果只更新了组件的部分区域,可能需要指定重绘的区域。
    • 解决方案: 使用repaint(Rectangle)方法来指定需要重绘的区域。
    • 解决方案: 使用repaint(Rectangle)方法来指定需要重绘的区域。

参考链接

通过以上方法,你应该能够解决在分配了新的变量并调用了paintComponent()之后无法更改重新绘制的输出的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

算法可视化 顶

这里我们依然使用控制台来输出。...由于此种方式无法展现排序主要过程,所以我们做出修改。...由于8是第一个元素,它前面没有元素,所以8不需要移动,被确定下来 ? 我们来看第二个元素6,6与前面的元素8比较,6比8小,所以6要放到8前面,被确定下来。 ? ? ?...最后值得一提是,n比较小时候,插入排序比O(nlog n)排序算法有优势。插入排序算法经常用作是高级排序算法处理到小样本时一个优化。...归并排序可视化 归并排序算法是将一个数组分成两部分——左边和右边,然后使用同样算法对左边进行排序,再使用同样算法对右边进行排序。之后将两个有序数组,归并成一个有序数组。 ? ?

1.2K30

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

无论是游戏开发、CAD 系统还是图形用户界面中,弧绘制与处理都非常重要。然而,计算机通常无法直接绘制出完美的弧线,因此需要通过将弧线近似为一系列直线段来进行绘制。这一过程被称为“弧度转多线段”。...什么是弧线与多线段了解“弧度转多线段”之前,我们首先需要理解“弧线”和“多线段”定义: 弧线:弧是圆或椭圆一部,通常由中心点、半径和起止角度定义。...具体分析如下:代码核心功能该代码根据给定圆心、半径和起始/终止角度,将一个圆弧均匀分割为若干段,打印出每个分割点坐标。变量说明cx 和 cy:分别是圆心 X 坐标和 Y 坐标。...通过这个例子,您可以图形应用程序中实现弧线绘制根据需要调整线段数量以控制弧线精度。拓展:弧线和多线段不同领域应用1....无论是 CAD、游戏开发还是动画设计中,弧度转多线段应用都十广泛,掌握这一技术能够帮助开发者更好地处理几何图形,提高应用性能和渲染质量。

15922
  • 35. 精读《dob - 框架实现》

    所以 callback 函数中用到变量被记录了下来,当变量更改时,会触发 new Reaction ,又重新收集一轮依赖,同时执行了 callback。...这样就实现了回函数用到变量被改变后,重新执行这个回函数,这就是 observe。 为什么依赖追踪只支持同步函数 依赖收集无法得到触发时环境信息。...依赖收集由 getter、setter 完成,但触发时,却无法定位触发代码位于哪个函数中,所以为了依赖追踪(即变量与函数绑定),需要定义一个全局变量标示当前执行函数,当各依赖收集函数执行没有交叉时,可以正常运作...我们可以逐层分解,每一层执行时,子元素如果是 observe,就会临时放到队列里跳过,父 observe 执行完毕后,检查执行队列,两层嵌套时执行逻辑如下图所示: 这些努力,就是为了保证同步执行时...set: 任何数据发生了 setter。 deleteProperty: 任何数据 key 被移除时。 runInAction: 调用了 Action。

    56910

    Java中JList和DefaultListModel亲密关系

    添加元素方法中 ? 调用了父类fireIntervalAdded方法 ? ?...同理,在他删除元素方法中,他调用了父类fireIntervalRemoved方法,因此可以将JList内容刷新。 最后就是 绘制元素 JList中,内部显示每一个元素叫做一个Cell。...在这个类里面有3个私有变量,分别存放Cell内容,Cell前景色和背景色。因为Cell绘制完全由程序员来实现,因此这些内容都是必须。...之后就是接口中规定getListCellRendererComponent方法,这个方法其实很简单,就是对三个变量进行赋值返回自己。...如果你想在绘制Cell时候加入什么花样,那么尽管PaintComponent中施展你才华吧,上述代码只提供了指定位置绘制文本,算是抛砖引玉了。

    1K41

    2018 - iOS 面试题汇总一般面试题BAT面试题

    按分配方式 堆是动态分配和回收内存,没有静态分配堆 栈有两种分配方式:静态分配和动态分配 静态分配是系统编译器完成,比如局部变量分配 动态分配是有alloc函数进行分配,但是栈动态分配和堆是不同...程序里面编译后数据段都是堆一部。 栈:是个线程独有的,保存其运行状态和局部自动变量。栈在线程开始时候初始化,每个线程栈互相独立,因此 ,栈是 thread safe。...readonly 是只读特性 只会生成getter方法 不会生成setter方法 ;不希望属性类外改变 assign 是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时; retain...表示持有特性,setter方法将传入参数先保留,再赋值,传入参数retaincount会+1; copy 表示拷贝特性,setter方法将传入对象复制一份;需要完全一份变量时。...为这种属性设置值得时,设置方法既不保留值,也不释放旧值。此特性同assign类似,然后属性所指对象遭到摧毁时,属性值也会清空(nil out)。 弱引用,不决定对象存亡。

    6.4K30

    vue高频面试题合集(二)附答案

    $nextTick 是在下次 DOM 更新循环结束之后立即执行延迟回修改数据之后使用,则可以中获取更新后 DOM。...是用来函数劫持方式,重写了数组方法,具体呢就是更改了数组原型,更改成自己,用户调数组一些方法时候,走就是自己方法,然后通知视图去更新。...nextTick 使用场景和原理nextTick 中是在下次 DOM 更新循环结束之后执行延迟回修改数据之后立即使用这个方法,获取更新后 DOM。...触发Compile中绑定,则功成身退。...diff 算法过程中,先会进行新旧节点首尾交叉对比,当无法匹配时候会用节点 key 与旧节点进行比对,从而找到相应旧节点.更准确 : 因为带 key 就不是就地复用了, sameNode 函数

    1K30

    2023前端一面vue面试题合集_2023-02-27

    ()方法,触发Compile中绑定,则功成身退。...无$el . beforeMount:挂载之前调用,相关render 函数首次被调用 mounted:了被新创建vm.$el替换,挂载到实例上去之后调用改钩子。...beforeUpdate:数据更新前调用,发生在虚拟DOM重新渲染和打补丁,在这之后会调用改钩子。 updated:由于数据更改导致虚拟DOM重新渲染和打补丁,在这之后会调用改钩子。...$nextTick 是在下次 DOM 更新循环结束之后立即执行延迟回修改数据之后使用,则可以中获取更新后 DOM。...template无法被浏览器解析渲染,因为这不属于浏览器标准,不是正确HTML语法,所有需要将template转化成一个JavaScript函数,这样浏览器就可以执行这一个函数渲染出对应HTML

    74240

    创建被图像填充组件解释几处做法解释几点

    ()*0.5),(int)(dimension.getHeight()*0.5),null);//大小缩放为原来之50 这里就要说说Graphics类中绘制图像方法了 drawImage(Image...,甚至在要绘制图像区域没有针对当前输出设备完成缩放、抖动或转换情况下也是如此。...ImageObserver用于构造 Image 时,接收有关 Image 信息通知异步更新接口。...我理解是,当设置好了背景之后,并不一定是马上输出设备上体现出来,需要一定时间 如果上一个设置图像还在输出时候又设置一次图像的话,那么方法返回false,等到上一次设置图像输出完毕了之后,通知指定图像观察者...)); 注意到实例化Insets有四个参数分别是距离上左下右边界距离 需要注意是:::::如果不想要边空的话 setMargin(null); 这样子做的话,是不会起效果,反而是用了默认边空,由Border

    1.2K90

    【TypeScript 演化史 — 第二章】基于控制流类型分析 和 只读属性

    尽管如此,类型检查器在任何给定位置都为 command 变量使用最具体类型 配了字符串 “pwd” 之后,command 变量就不可能是字符串数组(联合类型中惟一其他选项)。...配了字符串数组 ["ls", "-la"] 之后,command 变量不再被视为字符串,现在它是一个字符串数组,所以对 join 方法也就能调用了。... TypeScript 2.0 之前,编译器无法推断出上面的语义。...严格 null 检查模式下,对类型不允许为 undefined 局部变量有明确赋值分析: let name: string; // Error: 赋值前使用了变量 “name” console.log...现在,我们可以创建一个表示原点 point(0, 0) 对象: const origin: Point = { x:0, y:0 }; 由于 x 和 y 标记为 readonly,因此我们无法更改这两个属性

    2K10

    Vue中三种Watcher

    根据上面的三部实现一个功能非常简单Demo,实际Vue中数据页面的更新是异步,且存在大量优化,实际非常复杂。...操作是定义value局部变量,主要是利用了let块级作用域定义value局部变量利用闭包原理实现了getter与setter操作value,对于每个数据绑定时都有一个自己dep实例,利用这个总线来保存关于这个属性...Vue中computed是计算属性,其会根据所依赖数据动态显示计算结果,虽然使用{{}}模板内表达式非常便利,但是设计它们初衷是用于简单运算模板中放入太多逻辑会让模板过重且难以维护,...计算属性是基于数据响应式依赖进行缓存,只相关响应式依赖发生改变时它们才会重新求值,也就是说只要计算属性依赖数据还没有发生改变,多次访问计算属性会立即返回之前计算结果,而不必再次执行函数,当然如果不希望使用缓存可以使用方法属性返回值即可...就可以对其进行监听,当然Vue3中使用Proxy就不存在这个问题了,这原本是Js引擎内部能力,拦截行为使用了一个能够响应特定操作函数,即通过Proxy去对一个对象进行代理之后,我们将得到一个和被代理对象几乎完全一样对象

    1.1K10

    2022秋招前端面试题(八)(附答案)

    块级作用域解决了ES5中两个问题:内层变量可能覆盖外层变量用来计数循环变量泄露为全局变量(2)变量提升: var存在变量提升,let和const不存在变量提升,即在变量只能在声明之后使用,否会报错...let创建变量是可以更改指针指向(可以重新赋值)。但const声明变量是不允许改变指针指向。...后面是一个匿名自执行函数, if 条件中调用了函数 g(),由于匿名函数中,又重新定义了函数g,就覆盖了外部定义变量g,所以,这里调用是内部函数 g 方法,返回为 true。...3、then方法返回一个Promise实例,接收两个参数onResolved(fulfilled状态);onRejected(rejected状态,该参数可选)4、catch方法返回一个...其位置发生改变,就会重新进行绘制

    54620

    Java Getter和Setter

    Getter是一种读取变量方法。Getter和setter Java 中也称为访问器和更改器。 2.为什么我们需要Getter和Setter?...通过使用getter和setter,程序员可以控制如何以适当方式访问和更新其重要变量,例如在指定范围内更改变量值。...这意味着两个变量都引用内存中同一对象 myScores 数组对象。因此,对scores 或 myScores 变量所做更改 实际上是同一对象上进行。...由于getter方法直接返回内部变量score引用,因此外部代码可以获得该引用更改内部对象。 这种情况解决方法是,我们应该返回对象副本,而不是直接在getter中返回引用。...6.实现常见对象类型Getter和setter 字符串对象getter和setter: String是一种对象类型,但是是不可变,这意味着一旦创建了String对象,就无法更改其String文字。

    6.9K11

    Vue2 源码解析

    而 “推送(push)” 策略则不同,它需要关注每一个变量变更时候,有哪些地方依赖这个变量一一通知这些地方进行更新。...Vue 编译模板过程: 根据不同环境使用不同参数生成 compiler 使用 HTML parser 解析模板,调用回事件 Vue 事件中生成 AST 针对生成 AST 进行优化(分析出纯静态...DOM,将它们放入常量中,这样重新渲染和 patch 时候能直接跳过它们) 4、render 方法原理 前文提过,Vue 将模板编译为 AST 并且优化之后,会将 AST 转换成虚拟 DOM...$refs 来获取子组件也是无法获取到。此时也需要通过 nextTick() 方法来异步读取 JS 执行完宏任务后,会获取所有的微任务一一执行,其中 DOM 更新也属于这些微任务中一员。...,则不能使用浏览器导航,而是直接完成 URL 对应界面的渲染,并将浏览器中显示 URL 更新为新界面对应 URL 监视 URL 变更,当用户手工更改 URL 或者有其它逻辑更改了 URL 之后

    1.2K42

    拿到大厂前端offer前端开发是怎么回答面试题

    : 无法被回收定时器: 未被正确关闭,导致所引用外部变量无法被释放事件监听: 没有正确销毁 (低版本浏览器可能出现)闭包第一种情况是我们由于使用未声明变量,而意外创建了一个全局变量,而使这个变量一直留在内存中无法被回收...$set() 解决对象新增属性不能响应问题Vue使用了Object.defineProperty实现双向数据绑定在初始化实例时对属性执行 getter/setter 转化属性必须在data对象上存在才能让...然后当浏览器解析到 script 标签时,会暂停构建 DOM,完成后才会从暂停地方重新开始。...PNG是一种比较图片格式,PNG-8是非常好GIF格式替代者,可能情况下,应该尽可能使用PNG-8而不是GIF,因为相同图片效果下,PNG-8具有更小文件体积。...这意味着SVG图片在放大时,不会失真,所以它非常适合用来绘制Logo、Icon等。(7)WebP是谷歌开发一种图片格式,WebP是同时支持有损和无损压缩、使用直接色点阵图。

    32580

    flutter跨平台原理

    转换,因为Flutter执行热刷新时会保留程序原来state 3.全局变量和静态成员变量,这些变量不会在热刷新时更新。...Dart垃圾回收也采用了多生代算法,新生代回收内存时采用了“半空间”算法,触发垃圾回收时Dart会将当前半空间中“活跃”对象拷贝到备用空间,然后整体释放当前空间所有内存: 整个过程中Dart...很好理解,**就是控件大小不会影响其他控件时,就没必要重新布局整个控件树。**有了这个机制后,无论子树发生什么样变化,处理范围都只子树上。 确定每个空间位置和大小之后,就进入绘制阶段。...之后再需要绘制其他内容(标记 5)就需要再增加一个图层(红色)。再接下来要绘制节点 1 右子树(标记 6),也会被绘制到红色图层上。...如下图所示,在从上到下遍历控件树遇到 Repaint Boundary 会重新绘制图层(深蓝色),在从下到上返回时候又遇到 Repaint Boundary,于是又增加一个图层(浅蓝色)。

    1.9K30

    VUE面试题

    异步渲染(以及合并data修改),以提高渲染性能,$nextTick DOM 更新完之后,触发回。...另外, vue 中可以通过 ref 获取元素:给元素添加ref属性设置名称,然后通过 this....,而不必再次执行函数;而 methods 每当触发重新渲染时,调用方法总会再次执行函数 computed 和 watch区别:computed 默认只要 getter,不过需要时也可以提供 setter...,且只有当它依赖值发生了改变才会重新计算 mutation:更改 vuex store中状态唯一方法是提交 mutation(mutation提交修改状态).每个mutation 都有一个字符串事件类型...(type)和一个回函数(handler),这个回函数就是我们实际进行状态更改地方,并且它会接受 state 作为第一个参数,使用 store.commit, (mutation是同步) action

    1.4K30

    VUE面试题

    异步渲染(以及合并data修改),以提高渲染性能,$nextTick DOM 更新完之后,触发回。...另外, vue 中可以通过 ref 获取元素:给元素添加ref属性设置名称,然后通过 this....,而不必再次执行函数;而 methods 每当触发重新渲染时,调用方法总会再次执行函数 computed 和 watch区别:computed 默认只要 getter,不过需要时也可以提供 setter...,且只有当它依赖值发生了改变才会重新计算 mutation:更改 vuex store中状态唯一方法是提交 mutation(mutation提交修改状态).每个mutation 都有一个字符串事件类型...(type)和一个回函数(handler),这个回函数就是我们实际进行状态更改地方,并且它会接受 state 作为第一个参数,使用 store.commit, (mutation是同步) action

    1.1K20

    气球飘飘:用Java Swing创造令人心旷神怡视觉奇观

    你是否曾经想象过能够创造出一个令人心旷神怡视觉奇观?本文中,我将向你展示如何利用Java Swing技术,以及一些简单代码,让彩色气球屏幕上飘舞起来。...AWT是一种与本地系统紧密耦合技术,它使用了本地系统组件和事件模型,因此具有很好性能和集成度,但也导致了跨平台性和可定制性问题。...为了解决这些问题,Sun公司1997年推出了JFC(Java Foundation Classes),其中包含了一个图形用户界面技术——Swing。...Swing是一种纯Java技术,它不依赖于本地系统组件,而是自己绘制所有的界面元素,因此具有很好跨平台性和可定制性,但也牺牲了一些性能和集成度。...事件是指Swing组件所响应用户操作或系统通知,如鼠标点击、键盘输入等,它们都继承自java.awt.AWTEvent类,使用了观察者模式来实现事件监听和分发。

    12110
    领券