[英]How to make characters appear on canvas
复制并修改您的画布以实现 KeyListener 接口,将自身添加为自己的 KeyListener ,并调用 setFocusable(true) 以接收键盘焦点。 当键入一个键时,您的程序应该在画布上最后一个鼠标事件的位置绘制相应的字符(请参阅 KeyEvent.getKeyChar() )。 如果在没有单击鼠标的情况下键入另一个键,则在前一个字符的右侧绘制下一个字符,就像在文本字段中键入一样。 再一次,想想你需要保持什么状态才能做到这一点。 它不一定是完美的(如果你愿意,你可以硬编码字符的宽度)。
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JComponent;
import javax.swing.JFrame;
public class Canvas05 extends JComponent implements KeyListener {
public Canvas05() {
addKeyListener(this);
setFocusable(true);
}
@Override
public void keyTyped(KeyEvent e) {
System.out.print(e.getKeyChar());
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
public static void main (String[] args){
Canvas05 c = new Canvas05();
JFrame frame = new JFrame("Q05");
frame.add(c);
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
干得好。 mouseEvent 的位置很容易从 MouseListener 事件访问,您可以从中声明 x 和 y 变量
MouseListener.getX() 和 MouseListener.getY();
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Game extends JPanel{
public static int WIDTH = 500,HEIGHT = 500;
public static char myChar = ' ';
public static Game game = new Game();
public static JFrame frame = new JFrame();
public Game() {
this.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent e) {
myChar = (char)e.getKeyCode();
repaint();
}
@Override
public void keyReleased(KeyEvent arg0) {
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
});
setFocusable(true);
}
public void paint(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g.clearRect(0, 0, WIDTH, HEIGHT);
g.setColor(Color.red);
g.setFont(new Font("Cambria",Font.BOLD,30));
g.drawString(String.valueOf(myChar),100, 100);
}
public static void main(String [] args){
frame.add(game);
frame.setSize(WIDTH, HEIGHT);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.