直接对一个JFrame进行repaint的话,会出现屏幕闪烁或者不能显示屏幕的问题
如下代码
import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class S2P11 extends JFrame { /** * */ private static final long serialVersionUID = 1L; final int WIDTH = 900, HEIGHT = 650; double p1Speed = .5, p2Speed = .5; /************************************************/ final int UP = 0, RIGHT = 1, DOWN = 2, LEFT = 3; int p1Direction = UP; int p2Direction = UP; /************************************************/ Rectangle p2 = new Rectangle(WIDTH/9 + (int)(WIDTH/9*1.5/2), (HEIGHT/2) + (HEIGHT/10), WIDTH/30, WIDTH/30); Rectangle p1 = new Rectangle(WIDTH/9, HEIGHT/2, WIDTH/30, WIDTH/30); public S2P11() { super("Radical Racing"); setSize(WIDTH/9*10, HEIGHT/9*10); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); new Thread() { public void run() {while(true) { while(true) { repaint(); p2.y+=10; try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }}; }.start(); } public void paint(Graphics g){ super.paint(g); Graphics2D g2d=(Graphics2D)g; g2d.setColor(Color.DARK_GRAY); g2d.fillRect(0, 0, WIDTH, HEIGHT); g2d.setColor(Color.red); g2d.fill3DRect(p2.x, p2.y, p2.width, p2.height,true); } /************************************************/ public static void main(String[] args) { new S2P11(); } }
所以如果我们要更新显示的内容 不要直接对Frame刷新 而是在JFrame上添加JPanel 然后对JPanel刷新
相关推荐
在Java编程语言中,Swing是一个用于构建图形用户界面(GUI)的库,它是Java Foundation Classes...在实际开发中,还需要注意兼容性问题,因为透明和形状化的窗口特性可能在不同的操作系统和Java版本中有不同的表现。
这可以通过继承javax.swing.Timer类来实现,Timer类可以定时触发指定的回调方法,在这个回调中,我们可以更新每片雪花的位置,然后调用JPanel的repaint方法,通知Swing组件需要重新绘制。 此外,我们还需要考虑雪花...
在描述中提到,需要对Thread有一点基础,这是因为游戏中的弹球运动需要实时更新,这就涉及到了多线程的概念。在Java中,主线程负责处理用户交互,而游戏逻辑(弹球的移动、碰撞检测等)则通常在一个单独的线程中运行...
3. **Repaint机制**:Swing使用`repaint()`方法来请求组件重绘,它会调度一个`paint()`或`paintComponent()`调用来更新显示。 4. **Event Dispatch Thread (EDT)**:为了保证线程安全,所有与UI相关的操作都应该在...
7. **事件处理**:在定时器的回调函数中,我们需要更新文本的位置,然后调用`repaint()`方法,这会触发`paintComponent`再次绘制,形成动画效果。 8. **布局管理**:注意,可能需要设置JPanel的布局管理器为`null`...
`JPanel`是Swing中的基础容器,可以添加组件并自定义其行为。在这里,我们扩展`JPanel`来实现画图功能。 3. **Graphics2D接口**: `java.awt.Graphics2D`接口提供了绘制基本形状和路径的能力。在这个项目中,我们将...
`JFrame` 是Swing库中的一个关键组件,它代表应用程序的主窗口。通过继承`JFrame`,我们可以创建具有标题、大小和位置的可视窗口。例如,`SmileyFace` 类就扩展了`JFrame`,用于展示一个笑脸。 2. **事件处理**: ...
Swing的JPanel或JComponent类可以方便地实现这一点,通过重写paintComponent()方法,每次需要更新界面时调用repaint()即可触发重新绘制。 在实际开发中,为了提高性能和兼容性,还需要考虑Java小程序的安全限制和...
在Java编程语言中,画图功能通常通过Java的图形用户界面(GUI)库来实现,如Java AWT(Abstract Window Toolkit)和Swing。在这个"Java画图板简单程序"中,开发者创建了一个简易的画图应用,允许用户在界面上绘制...
`repaint()`方法用于请求组件进行重绘,这样每次定时器触发时,程序都会更新屏幕显示,从而创造出烟花升空、绽放和消散的动态效果。 4. **颜色和随机性**: 烟花的颜色变化是其魅力的一部分。Java的`Color`类可以...
通过Java AWT或Swing库,可以轻松实现这一点,比如使用KeyAdapter类来处理键盘事件。 接下来,我们讨论图形界面显示。贪吃蛇游戏的界面需要实时更新蛇的位置和食物的位置。Java提供了丰富的图形库,如AWT和Swing,...
以下是一些关于这个项目的关键知识点: 1. **Java GUI库**: 项目主要基于Java的Swing或JavaFX库来构建图形界面。Swing是Java AWT(抽象窗口工具包)的扩展,提供了丰富的组件和预设样式,而JavaFX则提供更现代的UI...
这通常涉及到Swing的repaint()方法,该方法会触发组件的重绘,使变化可见。 项目的源代码可能包含了以下关键文件: 1. 主类(可能是DiceRollerDemo.java),负责初始化GUI和设置事件监听器。 2. GUI组件类,可能...
在这个小飞机游戏中,Java的`java.awt`和`javax.swing`包被用来创建用户界面和图形元素,而`java.util`可能用于管理游戏中的时间、计数器和其他数据结构。 游戏的核心是游戏循环,也称为主循环或渲染循环。在Java中...
在Java中,我们可以利用`javax.swing.Timer`或`java.awt.event.ActionEvent`来控制动画的帧率,实现定时更新屏幕上的图像。 创建烟花动画的第一步是定义烟花对象。每个烟花应包含位置、颜色、速度和方向等属性。...
在Java编程中,JFrame是一个非常重要的组件,它是Java Swing库中的顶级容器,用于创建窗口应用程序。本文将详细介绍如何使用JFrame来实现一个动态模拟时钟。 首先,我们需要创建一个继承自JPanel的类,例如名为...
为了实现这一点,我们需要创建一个新的面板(`JPanel`),并在其中重写`paint`方法。 **示例代码详解**: ```java import javax.swing.*; import java.awt.*; public class MyWindow extends JFrame { public ...