importjava.awt.event.*;importjava.awt.*;importjavax.swing.*;publicclassTestMessagePanelextendsJFrame{privateMessagePanelmessagePanel=newMessagePanel();publicTestMessagePa...
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class TestMessagePanel extends JFrame {
private MessagePanel messagePanel = new MessagePanel();
public TestMessagePanel() {
add(messagePanel);
messagePanel.setFocusable(true);
}
public static void main(String[] args) {
TestMessagePanel frame = new TestMessagePanel();
frame.setTitle("TestMessagePanel");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 200);
frame.setVisible(true);
}
static class MessagePanel extends JPanel {
private String message = "";
private Font font = new Font("serif", Font.BOLD, 20);
private Color color = Color.RED;
public MessagePanel() {
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
repaint();
//JOptionPane.showMessageDialog(null, "Delay");
message = "";
}
else
message += e.getKeyChar();
}
});
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setFont(font);
g.setColor(color);
FontMetrics fm = g.getFontMetrics();
int stringWidth = fm.stringWidth(message);
int ascent = fm.getAscent();
int x = getWidth() / 2 - stringWidth / 2;
int y = getHeight() / 2 + ascent / 2;
g.drawString(message, x, y);
}
}
}
这个执行起来无法显示字符,但去掉注释就可以,是不是意味着repaint()方法还未执行完就执行message = ""了,如果是,原理是什么
展开