【Core Java】中说JPanel与JComponent最大区别是JPanel不透明,而JPanel子类中覆盖paintComponent方法最常见做法是先调用super.paintComponent方法来用背景色绘制面板,可是为什么我没有调用super.paintComponent方法也会默认用背景色来绘制面板呢?
下边是我实验的代码。。
[code = Java]
import javax.swing.*;
import java.awt.*;public class MySwing { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub SimpleFrame frame = new SimpleFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}}class SimpleFrame extends JFrame {
public SimpleFrame() {
Toolkit kit = Toolkit.getDefaultToolkit();
setBounds(100, 100, kit.getScreenSize().width/2, kit.getScreenSize().height/2);
setTitle("Very Cool!!!");
setResizable(false);
setBackground(Color.BLACK);
Container c = getContentPane();
MyComponent m = new MyComponent();
c.add(m);
}
}
class MyComponent extends JPanel{
public void paintComponent(Graphics g) {
g.drawString("Very Happy", 100, 100);
}
}[/code]
下边是我实验的代码。。
[code = Java]
import javax.swing.*;
import java.awt.*;public class MySwing { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub SimpleFrame frame = new SimpleFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}}class SimpleFrame extends JFrame {
public SimpleFrame() {
Toolkit kit = Toolkit.getDefaultToolkit();
setBounds(100, 100, kit.getScreenSize().width/2, kit.getScreenSize().height/2);
setTitle("Very Cool!!!");
setResizable(false);
setBackground(Color.BLACK);
Container c = getContentPane();
MyComponent m = new MyComponent();
c.add(m);
}
}
class MyComponent extends JPanel{
public void paintComponent(Graphics g) {
g.drawString("Very Happy", 100, 100);
}
}[/code]
import java.awt.*;
import java.util.Random;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;public class MySwing { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub SimpleFrame frame = new SimpleFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}}class SimpleFrame extends JFrame {
public SimpleFrame() {
Toolkit kit = Toolkit.getDefaultToolkit();
setBounds(100, 100, kit.getScreenSize().width/2, kit.getScreenSize().height/2);
setTitle("Very Cool!!!");
setResizable(false);
setBackground(Color.BLACK); Container c = getContentPane();
final MyComponent m = new MyComponent();
c.add(m);
JButton button = new JButton("Repaint");
button.addActionListener(new ActionListener(){
@Override public void actionPerformed(ActionEvent e){
m.repaint();
}
});
c.add(button,BorderLayout.PAGE_END);
}
}
class MyComponent extends JPanel{ private final Random generator = new Random();
public void paintComponent(Graphics g) {
// super.paintComponent(g);
g.drawString("Very Happy", generator.nextInt(getWidth()), generator.nextInt(getHeight()));
}
}
点击repaint 按钮,可以看到有没有super.paintComponent(g)的区别