java - Java 小程序的 "Graphics g"中的 "paint()"的值是多少?

标签 java swing web-applications user-interface applet

在制作 Java 小程序方面,我是初学者,在我的第一个小程序中,我使用 paint() 绘制了一个笑脸。现在,我想让笑脸眨眼。我已经设法让我的计时器和一切都设置好了,但我需要使用 start() 方法来让计时器运行,而且似乎通过包含其他方法,paint 方法不会调用自身。因此,我假设我需要从 start() 调用 paint(),但问题是我不知道我应该将 Graphics 变量初始化为什么以使 paint() 实际工作。

中南合作商会

import java.awt.*;
import javax.swing.*;
import java.applet.Applet;
import java.awt.event.*; 

public class Project2_15 extends Applet
{   
    public void paint(Graphics g)
    {
setBackground(Color.lightGray);
    }

    // This handles the starting of timer execution.
    public void start()
    {
            Graphics g; // What do I initialize this to?
    paint(g);
    }

    // Timer Stuff
    ActionListener blinkShut;
    public Project2_15(final Graphics g) {
        this.blinkShut = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e)       {
                g.setColor(Color.black);
            }
        };
    }
}

最佳答案

修改后的代码如下:

import java.awt.*;
import javax.swing.*;
import java.applet.Applet;
import java.awt.event.*;

public class Project2_15 extends Applet
{

    public boolean wink = false;
    Timer timer;

    public void paint(Graphics g)
    {
        super.paint(g);
        // Graphics g; // What do I initialize this to?  ALREADY INITIALIZED
        //paint(g);
        if (wink) {
            g.drawLine(1,1,100,100);
        } else {
            g.drawOval(1,1,100,100);
        }
    }

    // This handles the starting of timer execution.  NO IT DOES NOT!
    // public void start()
    @Override
    public void init()
    {
        setBackground(Color.lightGray);
        timer = new Timer(250,blinkShut);
    }


    @Override
    public void start() {
        timer.start();
    }

    @Override
    public void stop() {
        timer.stop();
    }
    // Timer Stuff
    ActionListener blinkShut = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            wink = !wink;
            repaint();
        }
    };
}

参见 Performing Custom Painting .这与小程序或框架的基本过程相同。

  1. 将容器 (Panel/JPanel) 添加到顶级容器。
  2. 重写 paint(..) AWT 或 paintComponent(..) Swing 方法。
  3. 调用 super.. 作为第一条语句。
  4. 对提供的 Graphics 实例进行自定义绘画。

动画可以使用基于 Swing 的定时器来实现。

当然,我倾向于将步骤 1) 到 4) 替换为绘制到 JLabel/ImageIcon 中显示的 BufferedImage

关于java - Java 小程序的 "Graphics g"中的 "paint()"的值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19613449/

相关文章:

java - 使用 fork ="yes"forkmode ="perTest"运行 junit 的 Ant 脚本不会创建单独的虚拟机

java - 将 XML 字符串转换为 Java 对象 Jackson/JAXB

java - 如何在 Eclipse 的类路径中放置一个 jar?

java - 即使在扩展后,如何观察自定义对象何时更改

java - 如何在 JTable 列中仅选择一个复选框

c# - 网站引用了一个使用 NHibernate 与数据库对话的控制台应用程序

java - 在哪里创建属性文件以读取部署在 Weblogic(Linux) 上的 Web 应用程序中的值

java - 退出Java前如何保存

java - GIF 在游戏鼠标移动时停止动画

asp.net - 在 ASP.net 中创建弹出窗口以获取用户输入