当前位置:编程学习 > JAVA >>

Java基础教学

我想用键盘控制坦克上下左右移动!可是我没学过怎么用键盘,希望高手指点!
答案:import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class SimulatedTank extends JFrame implements KeyListener{ 
 JButton b;
 
 public  SimulatedTank(){
    
  b = new JButton("Tank");
  b.setBackground (Color.BLUE);
  b.setForeground (Color.RED);
 // b.setEnabled (false);
  b.setBorder (BorderFactory.createRaisedBevelBorder ());
  b.setSize (50,50);
  b.setLocation (375,225);
  b.addKeyListener (this);
  add(b);
  this.setTitle ("SimulatedTank");
  this.setLayout (null);
  this.setSize (800,500);
  this.setLocationRelativeTo (null);//窗口居中
  this.setVisible (true);
  this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
 }
 
 public void setLocaltion(String direction){
  int x = b.getLocation ().x;//坦克(按钮)的位置坐标
  int y = b.getLocation ().y;
  
  int w = b.getWidth ();//坦克(按钮)的宽与高
  int h = b.getHeight ();
    
  int width = this.getWidth ();//战场(界面)的宽与高
  int height = this.getHeight ();
  
  if(direction.equals ("上")){
   if(y>0) y-=5;//if()条件语句--防止坦克出界
  }else if(direction.equals ("下")){
   if(y<height-h-30) y+=5;
  }else if(direction.equals ("左")){
   if(x>0) x-=5;
  }else if(direction.equals ("右")){
   if(x<width-w-5) x+=5;
  }else{
   x=375;
   y=225;
  }
  this.setTitle ("Tank point is ("+x+","+y+")");
  b.setLocation (x,y);
 }
 
 public static void main(String[] args){
  new SimulatedTank();
  
 }
 public void keyTyped (KeyEvent e){}//敲击事件
 
 public void keyReleased (KeyEvent e){//释放事件
  this.setTitle ("SimulatedTank");
  
 } 
 public void keyPressed (KeyEvent e) {//按下事件
  if(e.getKeyCode ()==KeyEvent.VK_UP){
   setLocaltion("上");
  }else if(e.getKeyCode ()==KeyEvent.VK_DOWN){
   setLocaltion("下");
  }else if(e.getKeyCode ()==KeyEvent.VK_LEFT){
   setLocaltion("左");
  }else if(e.getKeyCode ()==KeyEvent.VK_RIGHT){
   setLocaltion("右");
  }
 } 
}

用键盘的上下左右键控制JAVA SWING UI中的组件的移动等事件
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestImage {

    public static void main(String[] args)
    {
        new TestFrame();
    }
}

class TestFrame extends JFrame
{
    CheckboxGroup group = new CheckboxGroup();
    Checkbox[] chk = new Checkbox[4];
    int current = 0, temp = 0;
    ChkListener l = new ChkListener();

    TestFrame()
    {
        chk[0] = new Checkbox("A", group, true);
        chk[1] = new Checkbox("B", group, false);
        chk[2] = new Checkbox("C", group, false);
        chk[3] = new Checkbox("D", group, false);
        //this.setLayout(new GridLayout(2, 2));
        this.getContentPane().setLayout(new GridLayout(2, 2));
        for (int i = 0; i < chk.length; i++) {
            chk[i].addItemListener(l);
            //add(chk[i]);
            this.getContentPane().add(chk[i]);
        }

        Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
            public void eventDispatched(AWTEvent e) {
                if (((KeyEvent)e).getID() == 401)
                    myAction(((KeyEvent) e).getKeyCode());
            }
        }, AWTEvent.KEY_EVENT_MASK);

        this.setSize(500, 400);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

    class ChkListener implements ItemListener
    {
        public void itemStateChanged(ItemEvent e)
        {
            current = (int)(group.getSelectedCheckbox().getLabel().charAt(0)) - (int)'A';
        }
    }

    public void myAction(int currentSelect)
    {
        switch (currentSelect)
        {
        case KeyEvent.VK_DOWN:
        case KeyEvent.VK_UP:
            current = (current + 2) % 4;
            group.setSelectedCheckbox(chk[current]);
            break;
        case KeyEvent.VK_LEFT:
        case KeyEvent.VK_RIGHT:
            current = current < 2 ? current = (current + 1) % 2 : (current + 1 > 3 ? 2 : 3);
            group.setSelectedCheckbox(chk[current]);
            break;
        case KeyEvent.VK_ENTER:
            JFrame frame = new JFrame("You selection is: " + group.getSelectedCheckbox().getLabel());
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            frame.setSize(300, 200);
            frame.setVisible(true);
        }
    }
}

 

上一个:Java编程问题
下一个:JAVA好学吗?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,