import javax.swing.*; import java.awt.*;import java.awt.event.*;public class TankClient extends JFrame{
private static final long serialVersionUID = 3656486349307285950L;
public static void main(String[] args) {
    TankClient tk = new TankClient();
    tk.window();
} public void window(){
JFrame jf1 = new JFrame("坦克大战");
Container container = jf1.getContentPane();
jf1.setBounds(250,60,800,600);
container.setBackground(Color.GREEN);
jf1.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
jf1.setResizable(false);
jf1.setVisible(true);
}

public void paint(Graphics g) {
Color c = g.getColor();
g.setColor(Color.RED);
g.fillOval(50, 50, 30, 30);
g.setColor(c);
}
}谁能告诉我这个不能画出圆?要详细

解决方案 »

  1.   

    试了下,JFrame不会调用paint方法,建议在JPanel中做绘图操作,并添加到JFrame中.
    JPanel中实现paintComponent方法
      

  2.   

    或者:import javax.swing.*;import java.awt.*;import java.awt.event.*;public class TankClient extends JFrame {
    private static final long serialVersionUID = 3656486349307285950L; public static void main(String[] args) {
    TankClient tk = new TankClient();
    tk.window();
    } public void window() {
    JFrame jf1 = new JFrame("坦克大战");
    Container container = jf1.getContentPane();
    jf1.setBounds(250, 60, 800, 600);
    container.setBackground(Color.GREEN);
    jf1.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    jf1.setResizable(true);
    jf1.setVisible(true);

    Graphics g = jf1.getGraphics();
    // Color c = g.getColor();
    g.setColor(Color.RED);
    g.fillOval(50, 50, 30, 30);
    // g.setColor(c);

    }
    }
      

  3.   

    写了下import java.awt.*;
    import java.awt.event.*;public class TankClient extends Frame {
    public static void main(String[] args) {
    new TankClient().window();
    } public void window() {
    setLocation(400, 300);
    setSize(800, 600);
    this.setTitle("TankWar");
    this.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    setResizable(false);
    this.setBackground(Color.GREEN);
    setVisible(true);
    } public void paint(Graphics g) {
    Color c = g.getColor();
    g.setColor(Color.RED);
    g.fillOval(50, 50, 30, 30);
    g.setColor(c);
    }
    }
      

  4.   

    LZ你主要的原因是paint方法没有被自动调用。应用程序不应直接调用 paint,而是应该使用 repaint 方法来安排重绘组件。  
    此方法实际上将绘制工作委托给三个受保护的方法:paintComponent、paintBorder 和 paintChildren。按列出的顺序调用这些方法,以确保子组件出现在组件本身的顶部。一般来说,不应在分配给边框的 insets 区域绘制组件及其子组件。子类可以始终重写此方法。只想特殊化 UI(外观)委托的 paint 方法的子类只需重写 paintComponent。 摘自java api 文档
    public class TankClient extends Frame
    public void window() {
    this.setBounds(250,60,800,600);
    this.setBackground(Color.GREEN);
    this.setTitle("坦克大战");
    this.setResizable(false);
    this.setVisible(true);
    }