2017-03-23 9 views
-2

キャンバスをコピーして変更し、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); 
     } 

    } 

答えて

0

ここに移動します。 mouseEventからの位置は、xとyの両方の変数を宣言できるMouseListenerイベントから非常に簡単にアクセスできます。

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

} 
+1

これは答えではありません。 –

関連する問題