Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在绘画中使用graphics2D,或者有更好的方法吗?_Java_Image_Applet_Graphics2d - Fatal编程技术网

Java 如何在绘画中使用graphics2D,或者有更好的方法吗?

Java 如何在绘画中使用graphics2D,或者有更好的方法吗?,java,image,applet,graphics2d,Java,Image,Applet,Graphics2d,我想使用graphics2D,但我无法让它显示我的图形。有没有更好的方法可以让我使用repaint()?最后,我想把一个图像设置为背景,并能在上面画画,然后将框架的内容保存为图像 import java.awt.image.*; import javax.imageio.ImageIO; import javax.swing.*; import java.io.File; import java.io.IOException; import java.net.URL; import java

我想使用graphics2D,但我无法让它显示我的图形。有没有更好的方法可以让我使用repaint()?最后,我想把一个图像设置为背景,并能在上面画画,然后将框架的内容保存为图像

import java.awt.image.*;
import javax.imageio.ImageIO;
import javax.swing.*;

import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.swing.JApplet;
import java.awt.*;

// assume that the drawing area is 150 by 150
public class test extends JApplet
{
  final int radius = 25;
  int width = 200, height = 200;

 BufferedImage img = new BufferedImage(
   width, height, BufferedImage.TYPE_INT_ARGB);

  public void paint (  )
  { 
    Graphics2D g = img.createGraphics();
    g.setColor( Color.orange );
    g.fillRect( 0, 0, 150, 150 );
    g.setColor( Color.black );

    g.drawOval( (150/2 - radius), (150/2 - radius), radius*2, radius*2 );
   }
}
好吧,那么

  • 你有
    public void paint()
    这到底在干什么,哈哈?您需要一个图形对象
    public void paint(图形g)
    类似于默认方法,在初始化小程序时会自动调用该方法

  • 您有
    Graphics2D g=img.createGraphics()当您需要使用默认的Graphics g对象并将其强制转换为Graphics2D对象时,如so
    Graphics2D g2d=(Graphics2D)g

  • 您还应该搜索有关双缓冲的更多信息:)

  • 无论如何。。。这段代码可以工作,所以从中获取您想要的:)

    注意我是如何实现Runnable的;如果只想使用Graphics2D代码,则无需执行此操作。它只是使类a线程,并用于游戏帧速率:)

    希望这有帮助

    import java.applet.*;
    import java.awt.*;
    
    
    public class Test extends Applet implements Runnable{
    
    public boolean isRunning = false;
    public int radius = 25;
    
    
    public void start() {
        isRunning = true;
        new Thread(this).start();
    }
    
    public void stop() {
        isRunning = false;
    }
    
    public void paint(Graphics g) {
        //Create Graphics2D object, cast g as a Graphics2D
        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(Color.ORANGE);
        g2d.fillRect(0, 0, 150, 150);
    
        g2d.setColor(Color.BLACK);
        g2d.drawOval((150/2 - radius), (150/2 - radius), radius * 2, radius * 2);
    }
    
    public void run() {
    
        while (isRunning) {
            repaint();
            try {
                Thread.sleep(17);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
    
    }
    
    1) 如果不调用
    paint()
    方法,请使用@Override符号进行检查。2) “然后将框架内容保存为图像”a)它不是框架,而是小程序。b) 默认情况下,小程序无法保存文件。3) 小程序的开发和调试要比应用程序复杂得多,我建议您暂时不要使用它们。4) 为什么在第二次最后一次也是最后一次结账之前的15个空行是
    }