当前位置: 首页 > 知识库问答 >
问题:

如何使用java.awt和graphics/graphics2d类绘制+更新(真的是任何东西)?

周涵畅
2023-03-14
public class someGUI extends Component {

    /**
     * GUI Attributes
     */

    private Frame aFrame = new Frame();
    private int aFrameWidth = 500, aFrameHeight = 500;

    /**
     * GUI Setup
     */

    public static void setUpGUI() {
        someGUI gui = new someGUI();

        gui.setUpFrame(Color.white, Color.black);

        gui.paint(gui.getFrame().getGraphics());
    }

    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.black);
        g.drawLine(0, 0, 500, 500); // seems to not work at all, ever
        g.drawOval(200, 200, 50, 50);  // seems to work sometimes, usually vanishes immediately
        g.drawRect(400, 400, 50, 50); // same as oval
        g.drawString("this is a test!!!", 300, 300); // always works, but vanishes as soon as GUI window is manually minimized and re-opened
        System.out.println("paint method has been invoked!");
    }
    public void setUpFrame(Color pBGColor, Color pFGColor) {
    Dimension size = new Dimension(this.getFrameWidth(), this.getFrameHeight());
    Color bgColor = pBGColor, fgColor = pFGColor;

    // name
    this.getFrame().setName("MainFrame");

    // title
    this.getFrame().setTitle("someApplication");

    // sizes
    this.getFrame().setSize(size);
    this.getFrame().setPreferredSize(size);

    // colors
    this.getFrame().setBackground(bgColor);
    this.getFrame().setForeground(fgColor);

    // booleans
    this.getFrame().setUndecorated(false);
    this.getFrame().setResizable(false);
    this.getFrame().setAlwaysOnTop(false);
    this.getFrame().setVisible(true);

    // functionalities
    this.getFrame().addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
            System.exit(-2);
        }
    });
}

目前,每当我启动该程序时,我就会看到椭圆形/圆形、矩形/正方形和字符串(自从我添加它以来,这条线就一直不见了,我不知道为什么它不画线)。当我,比如说,注释掉创建矩形的行并重新启动程序时,除了打印的字符串出现在框架上后,所有的东西都立即消失了。

此外,我如何更新这些绘画/框架,让绘画保留在框架上?当我最小化+重新打开窗口时,框架中的所有东西都被擦除(除了GUI的其余部分)。一旦这些画消失了,就需要非常不一致的时间/重新启动才能让东西重新出现。

附注:我完全知道我不应该使用java.AWT,我应该在这个特定的项目中使用AWT。

共有1个答案

潘向明
2023-03-14
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class someGUI extends Frame {

    /**
     * GUI Attributes
     */

    private int frameWidth = 500, frameHeight = 500;

    /**
     * GUI Setup
     */

    public static void main(String[] args) {
        someGUI gui = new someGUI();

        gui.setUpFrame(Color.white, Color.black);

    }

    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.black);
        g.drawLine(0, 0, 500, 500); // seems to not work at all, ever
        g.drawOval(200, 200, 50, 50);  // seems to work sometimes, usually vanishes immediately
        g.drawRect(400, 400, 50, 50); // same as oval
        g.drawString("this is a test!!!", 300, 300); // always works, but vanishes as soon as GUI window is manually minimized and re-opened
        System.out.println("paint method has been invoked!");
    }
    
    public void setUpFrame(Color pBGColor, Color pFGColor) {
        Dimension size = new Dimension(this.getFrameWidth(), this.getFrameHeight());
        Color bgColor = pBGColor, fgColor = pFGColor;

        // name
        this.setName("MainFrame");

        // title
        this.setTitle("someApplication");

        // sizes
        this.setSize(size);
        this.setPreferredSize(size);

        // colors
        this.setBackground(bgColor);
        this.setForeground(fgColor);

        // booleans
        this.setUndecorated(false);
        this.setResizable(false);
        this.setAlwaysOnTop(true);
        this.setVisible(true);

        // functionalities
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(-2);
            }
        });
    }

    public int getFrameWidth() {
        return frameWidth;
    }

    public void setFrameWidth(int frameWidth) {
        this.frameWidth = frameWidth;
    }

    public int getFrameHeight() {
        return frameHeight;
    }

    public void setFrameHeight(int frameHeight) {
        this.frameHeight = frameHeight;
    }
}
 类似资料:
  • 我只是试图用DrawOval()方法画圆,当我运行程序时,它只显示小正方形。我试图将构造函数添加到Surface类,但它不起作用。这是我制作的代码:

  • 问题内容: 我正在尝试制作绘画程序的项目中。到目前为止,我已经使用Netbeans来创建GUI并设置程序。 到目前为止,我已经能够调用在其中绘制所需的所有坐标,但是我对如何在其中实际绘制感到非常困惑。 在我的代码接近尾声时,我在面板内部进行绘制的尝试失败。 谁能在这样的示例中解释/显示如何使用图形? 我发现的所有示例都创建了一个类并对其进行扩展,JPanel但是我不知道是否可以这样做,因为它是在n

  • 几天前我开始了Java,并在我从图书馆借来的Java教程中对一些Java代码进行了实验和胡闹。 现在我挑战自己,让字符串出现在小程序中的随机位置。我尝试使用更改字符串的x-y坐标,但变量类型不同,我感到困惑。有没有办法让字符串在我每次打开小程序时出现在随机的地方?(稍后我将使用。awt按钮移动字符串。) 下面是我的代码:

  • 问题内容: 我正在尝试使用Java的Graphics2D在屏幕上绘制图像。这是我正在使用的代码。我想看到图像在屏幕上稳定移动。目前,我可以看到图像,但是除非调整窗口大小,否则图像不会移动,在这种情况下,图像确实会移动。我已经勾勒出以下课程。 传递给Tester的Component对象是以下类: 我确保此类仅添加了一个精灵。Sprite类大致如下: 但是,我在屏幕上仅看到固定的Bowser图像。除非

  • 我试图用libGdx和MVC模式制作一个游戏。我有一个我的游戏模型,我打算一直运行,而不是我的渲染方法从应用程序。因此,我在从libgdx扩展Game的类中做了这样的工作:首先,我将连续呈现设置为false,为了调用呈现方法,我使用gamescreen作为模型的监听器。

  • 本文摘自flappy bird娱乐教程的第6天--http://www.kilobolt.com/day-6-adding-graphics---welcome-to-the-necropolis.html 这是我在游戏中使用的纹理图像文件。它是一个256px64px.png文件。 这里是我用来加载纹理的类,以及我希望SpriteBatch绘制的特定的TextureRegion(纹理的一部分)。