`
人生难得糊涂
  • 浏览: 117382 次
社区版块
存档分类
最新评论

关于Swing中repaint的一点问题

 
阅读更多

直接对一个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刷新

0
0
分享到:
评论

相关推荐

    Swing 实现透明窗体

    在Java编程语言中,Swing是一个用于构建图形用户界面(GUI)的库,它是Java Foundation Classes...在实际开发中,还需要注意兼容性问题,因为透明和形状化的窗口特性可能在不同的操作系统和Java版本中有不同的表现。

    Java桌面雪花

    这可以通过继承javax.swing.Timer类来实现,Timer类可以定时触发指定的回调方法,在这个回调中,我们可以更新每片雪花的位置,然后调用JPanel的repaint方法,通知Swing组件需要重新绘制。 此外,我们还需要考虑雪花...

    小弹球游戏

    在描述中提到,需要对Thread有一点基础,这是因为游戏中的弹球运动需要实时更新,这就涉及到了多线程的概念。在Java中,主线程负责处理用户交互,而游戏逻辑(弹球的移动、碰撞检测等)则通常在一个单独的线程中运行...

    java画图

    3. **Repaint机制**:Swing使用`repaint()`方法来请求组件重绘,它会调度一个`paint()`或`paintComponent()`调用来更新显示。 4. **Event Dispatch Thread (EDT)**:为了保证线程安全,所有与UI相关的操作都应该在...

    JAVA100例之实例73 一个文字的移动广告

    7. **事件处理**:在定时器的回调函数中,我们需要更新文本的位置,然后调用`repaint()`方法,这会触发`paintComponent`再次绘制,形成动画效果。 8. **布局管理**:注意,可能需要设置JPanel的布局管理器为`null`...

    Java实现画图面板

    `JPanel`是Swing中的基础容器,可以添加组件并自定义其行为。在这里,我们扩展`JPanel`来实现画图功能。 3. **Graphics2D接口**: `java.awt.Graphics2D`接口提供了绘制基本形状和路径的能力。在这个项目中,我们将...

    2015-java-第6章 图形用户界面.ppt

    `JFrame` 是Swing库中的一个关键组件,它代表应用程序的主窗口。通过继承`JFrame`,我们可以创建具有标题、大小和位置的可视窗口。例如,`SmileyFace` 类就扩展了`JFrame`,用于展示一个笑脸。 2. **事件处理**: ...

    Java小程序为网页上的照片增辉.zip

    Swing的JPanel或JComponent类可以方便地实现这一点,通过重写paintComponent()方法,每次需要更新界面时调用repaint()即可触发重新绘制。 在实际开发中,为了提高性能和兼容性,还需要考虑Java小程序的安全限制和...

    Java画图板简单程序

    在Java编程语言中,画图功能通常通过Java的图形用户界面(GUI)库来实现,如Java AWT(Abstract Window Toolkit)和Swing。在这个"Java画图板简单程序"中,开发者创建了一个简易的画图应用,允许用户在界面上绘制...

    烟花 java 源代码

    `repaint()`方法用于请求组件进行重绘,这样每次定时器触发时,程序都会更新屏幕显示,从而创造出烟花升空、绽放和消散的动态效果。 4. **颜色和随机性**: 烟花的颜色变化是其魅力的一部分。Java的`Color`类可以...

    贪吃蛇sample

    通过Java AWT或Swing库,可以轻松实现这一点,比如使用KeyAdapter类来处理键盘事件。 接下来,我们讨论图形界面显示。贪吃蛇游戏的界面需要实时更新蛇的位置和食物的位置。Java提供了丰富的图形库,如AWT和Swing,...

    JAVA课程设计-画图板(含文档、源码)

    以下是一些关于这个项目的关键知识点: 1. **Java GUI库**: 项目主要基于Java的Swing或JavaFX库来构建图形界面。Swing是Java AWT(抽象窗口工具包)的扩展,提供了丰富的组件和预设样式,而JavaFX则提供更现代的UI...

    DiceRollerdemo:点击骰子将转向

    这通常涉及到Swing的repaint()方法,该方法会触发组件的重绘,使变化可见。 项目的源代码可能包含了以下关键文件: 1. 主类(可能是DiceRollerDemo.java),负责初始化GUI和设置事件监听器。 2. GUI组件类,可能...

    Java实现小飞机游戏.zip

    在这个小飞机游戏中,Java的`java.awt`和`javax.swing`包被用来创建用户界面和图形元素,而`java.util`可能用于管理游戏中的时间、计数器和其他数据结构。 游戏的核心是游戏循环,也称为主循环或渲染循环。在Java中...

    基于Java实现的最璀璨的烟花动画

    在Java中,我们可以利用`javax.swing.Timer`或`java.awt.event.ActionEvent`来控制动画的帧率,实现定时更新屏幕上的图像。 创建烟花动画的第一步是定义烟花对象。每个烟花应包含位置、颜色、速度和方向等属性。...

    如何使用JFrame完成动态模拟时钟

    在Java编程中,JFrame是一个非常重要的组件,它是Java Swing库中的顶级容器,用于创建窗口应用程序。本文将详细介绍如何使用JFrame来实现一个动态模拟时钟。 首先,我们需要创建一个继承自JPanel的类,例如名为...

    Java游戏编程从入门到精通

    为了实现这一点,我们需要创建一个新的面板(`JPanel`),并在其中重写`paint`方法。 **示例代码详解**: ```java import javax.swing.*; import java.awt.*; public class MyWindow extends JFrame { public ...

Global site tag (gtag.js) - Google Analytics