如下代码 我在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(); }}
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(); }}
你的不光是有时不显示,拖动时也会把图片刷掉。
我重写了一个,你看看吧
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");
}
}
因为Jpanel在移动或者从失去焦点状态到获得焦点状态的时候都会调用这个paintComponent方法
就导致你开始画出的圆形被重新刷掉了