java - JComponent 上的绘图故障

标签 java swing drawing

我在 JComponent 上绘图时遇到了这种奇怪的故障。 发生的情况是,每当我将 JFrame 窗口拖动到显示器边界之外时,绘图就会加速并且绘制速度比应有的要快。我猜它必须与 Swing 管理有关,似乎一旦 Jframe 离开屏幕,绘图就会停止,并在设置在监视器屏幕范围内后以突发方式恢复。

这是我的代码:

package javagame;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JComponent;

/**
*
* 
*/
public class Screen extends JComponent implements Runnable{

// paintbrush for drawing.
//private Graphics internalg;
private boolean keepDrawing = true;
public Screen() {        
   super();
   startDrawing();
}

/// Draw methods
@Override
protected void paintComponent(Graphics g) {         
    super.paintComponent(g);
    //internalg = g;
    //Draw 
    //System.out.println("painted");
    drawSomething(g);
}   

@Override
public void run() {
    //Draw until manually stopped
    while(keepDrawing){
        repaint();
    try { Thread.sleep(100); }
    catch (InterruptedException ex) { }
    }
}
/**
 * Fire off thread.
 */
private void startDrawing()
{
    Thread t = new Thread(this);
    //thread ends when JFrame is closed.
    t.setDaemon(true);
    t.start();

}
/// Draw Logic ///


/// Images
int d = 2;
public void drawSomething( Graphics internalg )
{
    if (isValid()){   
        internalg.setColor(Color.BLACK);
        internalg.fillRect(0, 0, getWidth(), getHeight());//clear bg
        internalg.setFont( new Font(Font.DIALOG, Font.BOLD, 15) );
        internalg.setColor( Color.GREEN );
        internalg.drawOval( (getWidth()/2)-(d/2) , (getHeight()/2)-(d/25), d, d);
        d++;
    }
}

/// Images

}

最佳答案

  • 您的绘画方法中没有程序逻辑。
  • 使用 float (double)来进行缩放,而不是像 d 这样的 int。
  • 将缩放数字的值基于系统时间,而不是基于代码中包含的逻辑,您无法控制它的调用速度(绘画方法)。

关于java - JComponent 上的绘图故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16473405/

相关文章:

java - Java中的全屏透明颜色叠加

java - repaint() 方法不调用paintCompnent

qt - 如何在 QtextEdit 中绘制形状

c# - 如何在 C# 中使 UserControls BackColor 透明?

java - 更改 JTextArea 的背景颜色时的工件

java - 如何动态调用Java中的方法

java - Android:扩展 Linearlayout,但 RelativeLayout 也需要相同。重复代码不可避免?

java - gwt Canvas 的命中区域?

iOS - 在不规则区域内绘制

java - 如何使用父类从子类获取参数?