62,621
社区成员
发帖
与我相关
我的任务
分享
class StringPanel extends JPanel {
private String message = "";
//private StringBuffer buffer = new StringBuffer();
public StringPanel() {
addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
//buffer.append(e.getKeyChar());
message += e.getKeyChar();
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
//message = buffer.toString().trim();
repaint();
message = ""; // In the correct version, this line is deleted
//buffer.setLength(0);
}
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
FontMetrics fm = g.getFontMetrics();
int stringAscent = fm.getAscent();
int stringWidth = fm.stringWidth(message);
int x = getWidth() / 2 - stringWidth / 2;
int y = getHeight() / 2 - stringAscent / 2;
g.drawString(message, x, y);
}
}
class StringPanel extends JPanel {
private String message = "";
//private StringBuffer buffer = new StringBuffer();
public StringPanel() {
addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
//buffer.append(e.getKeyChar());
message += e.getKeyChar();
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
//message = buffer.toString().trim();
repaint();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
message = "";
}
});
//message = ""; // In the correct version, this line is deleted
//buffer.setLength(0);
}
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
FontMetrics fm = g.getFontMetrics();
int stringAscent = fm.getAscent();
int stringWidth = fm.stringWidth(message);
int x = getWidth() / 2 - stringWidth / 2;
int y = getHeight() / 2 - stringAscent / 2;
g.drawString(message, x, y);
}
}
另外从代码效率来考虑的话, String 也好 StringBuffer 也好都是不推荐的, —— 应该用 StringBuilder。
代码简单更正如下:
class StringPanel extends JPanel {
private String message = "";
private StringBuilder buffer = new StringBuilder();
public StringPanel() {
addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
buffer.append(e.getKeyChar());
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
message = buffer.toString().trim();
buffer.delete(0, buffer.length());
repaint();
}
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
FontMetrics fm = g.getFontMetrics();
int stringAscent = fm.getAscent();
int stringWidth = fm.stringWidth(message);
int x = getWidth() / 2 - stringWidth / 2;
int y = getHeight() / 2 - stringAscent / 2;
g.drawString(message, x, y);
}
}
(上面两个示例代码都没有测试,也许有错误)