【发布时间】:2015-07-18 14:23:43
【问题描述】:
谁能解释一下为什么这段代码没有显示一个 20 x 20 白色椭圆形? 我已经添加了 cmets,所以你不必搜索太多。我认为我在绘画方法中做错了什么。或者是别的什么? 代码如下:
public class Dodge extends JFrame{ //EXTENDED JFRAME
public Dodge(){
JPanel panel = new JPanel();
//
panel.setBackground(Color.BLACK); //
//
add(panel); //
setTitle("Dodging game"); //
setDefaultCloseOperation(EXIT_ON_CLOSE); // GUI SETUP
setSize(500, 400); //
setLocationRelativeTo(null); //
setResizable(true); //
}
public void paint(Graphics g){
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.WHITE); //THIS METHOD SHOULD GIVE ME AN OVAL
g.fillOval(5, 5, 20, 20);
repaint();
}
public static void main(String[] args){ //
SwingUtilities.invokeLater(new Runnable() { // MAIN THREAD
@Override //
public void run() {
new Dodge().setVisible(true); //
我是初学者,所以请清楚什么是错的
另外请解释一下这个方法是如何在我没有调用它的时候导致程序发生变化的?
【问题讨论】:
-
你是在调用 Dodge() 中的方法 paint(Graphics g) 吗?
-
不,但它仍然会导致变化
-
我正在学习教程。它对他有用。而且他也没有调用该方法
-
您正在覆盖来自
JFrame(最初来自Component)的paint 方法。系统调用它来执行绘制。这就是它的调用方式。 -
这段代码中的问题是从
paint方法中调用repaint ()。而是覆盖JComponent/JPanel的paintComponent,其实是用来做绘画相关任务的。一个简单的例子可以引用here