gpt4 book ai didi

java - g.drawLine 不执行任何操作

转载 作者:行者123 更新时间:2023-12-02 07:17:19 28 4
gpt4 key购买 nike

这是我到目前为止的代码,其中包含一些打印行,只是为了确保它实际上进入了该方法。由于某种原因, Canvas 上没有绘制任何内容,我有一个与此类似的程序,就绘图而言,它工作得很好。这个有什么问题吗?

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.*;

public class gameOfLife implements ActionListener {
private int height;
private int width;
private Graphics g;
private JPanel panel;
private JFrame frame;
int[][] board= new int[40][40];

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
gameOfLife gui = new gameOfLife();
}

public gameOfLife() {
int height=400;
int width=400;
frame= new JFrame("Keegan's Game Of Life");
frame.setSize(new Dimension(height,width));
frame.setLayout(new BorderLayout());
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
g=frame.getGraphics();
drawBoard();
}

public void drawBoard() {
g.setColor(Color.BLUE);
g.drawLine(0, 0, 50, 50);
g.fillOval(50,50,10,10);
System.out.println("Done Drawing");
g.drawString("IT WORKED!", 100, 100);
}

@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
}

最佳答案

让我们从g=frame.getGraphics();开始

这是一个非常糟糕的主意,而不是自定义绘画的执行方式。 getGraphics 可能返回 null 并且通常只是最后一个绘制周期的快照。通过此方法绘制到 Graphics 上下文的任何内容都将在下一个重绘周期中被销毁。

您永远不应该维护对任何Graphics上下文的引用,它们是 transient 的,并且在绘制周期之间可能不是同一个对象

相反,您可以创建一个自定义组件(例如 JPanel)并覆盖它的 paintComponent 方法

查看Performing Custom Painting了解更多详情

已更新

你可以看看这个simple example一个想法...

关于java - g.drawLine 不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14765862/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com