Как заставить символы появляться на холсте

-6

Скопируйте и измените свой холст, чтобы реализовать интерфейс 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);
}

}

спросил(а) 2021-01-19T21:28:16+03:00 6 месяцев, 1 неделя назад
1
Решение
77

Ну вот. Местоположение из mouseEvent очень легко доступно из события MouseListener, где вы можете объявить переменную x и ay из

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);
}

}

ответил(а) 2021-01-19T21:28:16+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема