据我所知(我是java noob),当我调整窗口大小或更改其内容时,应该自动调用paintComponent()方法。它重绘了一切,所以当我用一个空方法重写它时,什么都不应该重绘......但它是。为什么?可能我错过了一些东西。什么是由paintComponent()重绘,一切?或者一些背景或不适合?当我用空的paintComponent(g)方法覆盖时为什么重绘组件?
import java.awt.*;
import javax.swing.*;
public class TextFrame extends JFrame {
public TextFrame(String text, String fontName) {
super("Show Font");
setSize(725, 150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TextFramePanel sf = new TextFramePanel(text, fontName);
JButton ok = new JButton("i hate disappearing");
sf.add(ok);
add(sf);
setVisible(true);
}
public static void main(String[] arguments) {
if (arguments.length < 1) {
System.out.println("Usage: java TextFrame message font");
System.exit(-1);
}
TextFrame frame = new TextFrame(arguments[0], arguments[1]);
}
}
class TextFramePanel extends JPanel {
String text;
String fontName;
public TextFramePanel(String text, String fontName) {
super();
this.text = text;
this.fontName = fontName;
}
public void paintComponent(Graphics comp) {
//super.paintComponent(comp);
/*Graphics2D comp2D = (Graphics2D)comp;
comp2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
Font font = new Font(fontName, Font.BOLD, 18);
FontMetrics metrics = getFontMetrics(font);
comp2D.setFont(font);
int x = (getSize().width - metrics.stringWidth(text))/2;
int y = getSize().height/2;
comp2D.drawString(text, x, y);
System.out.println("vlad");*/
}
}
出于好奇,也用空方法重写paint方法。 – christopher
究竟是在画什么,这是意想不到的? –
克里斯,是的,当我用一个空方法重写paint时,什么都不重绘;但是paintComponent呢?这些方法是否与特定组件相关?当我调整框架,painComponent也被称为。 – StackExploded