如下代码 我在JPanel 上画了一个圆形,当运行时图形有时出现 有时没有出现,是什么问题?import javax.swing.*;
import java.awt.*;
import java.awt.Font;public class gg { private JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="99,18"
private JPanel jContentPane = null; private gg(){
getJFrame();
jFrame.setVisible(true);
Graphics   g = jContentPane.getGraphics();
g.drawRoundRect(0, 0, 60, 60, 60, 60);
g.fillArc(0, 0, 60, 60, 60, 60);
}
private JFrame getJFrame() {
if (jFrame == null) {
jFrame = new JFrame();
jFrame.setSize(new Dimension(228, 214));
jFrame.setContentPane(getJContentPane());
jFrame.setVisible(true);
}
return jFrame;
} private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.setFont(new Font("Dialog", Font.PLAIN, 12));
jContentPane.setVisible(true);
}
return jContentPane;
} public static void main(String[] args) {
gg g = new gg(); }}

解决方案 »

  1.   

    你写的实在是恶心,在你基础上很不好改,下次记着类名大写,努力啊。
    你的不光是有时不显示,拖动时也会把图片刷掉。
    我重写了一个,你看看吧
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;public class Gtest extends JFrame{    private JPanel jContentPane = null;    private Gtest(String title) {
            super.setTitle(title);
            this.setSize(new Dimension(500, 300));
            this.setLocation(200, 200);
            this.setLayout(new BorderLayout());        jContentPane = new JPanel() {
                public void paint(Graphics g) {
                    super.paint(g);
                    g.drawRoundRect(0, 0, 60, 60, 60, 60);
                    g.fillArc(0, 0, 60, 60, 60, 60);
                }
            };
            
            this.add(jContentPane, BorderLayout.CENTER);
            this.setVisible(true);
            
            this.addWindowListener(new WindowAdapter(){
                public void windowClosing(WindowEvent e){
                    System.exit(0);
                }
            });
        }      public static void main(String[] args) {
            Gtest g = new Gtest("test");
        }
    }
      

  2.   

    原因是你没有重写Jpanel的paintComponent方法(也可能是楼上写的paint方法,我一般都重写paintComponent这个)
    因为Jpanel在移动或者从失去焦点状态到获得焦点状态的时候都会调用这个paintComponent方法
    就导致你开始画出的圆形被重新刷掉了