InputMap mapKeyInput;
ActionMap mapAction ;
HandlerKey hkLeft = new HandlerKey("LeftKey",KeyEvent.VK_LEFT);
HandlerKey hkRight = new HandlerKey("RightKey",KeyEvent.VK_RIGHT); private void setKeyMap(InputMap inputmap)
{
inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT,0),"LeftKey");
inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT,0),"RightKey");
inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_UP,0),"PageUp");
inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN,0),"PageDown");
inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT,0),"Insert");
inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0),"Delete");
}
private void initKeyMap()
{
mapKeyInput= getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
setKeyMap(mapKeyInput);
mapKeyInput = getInputMap(JComponent.WHEN_FOCUSED);
setKeyMap(mapKeyInput);
mapKeyInput = getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
setKeyMap(mapKeyInput);
mapAction = getActionMap();
mapAction.put("LeftKey",hkLeft);
mapAction.put("RightKey",hkRight);
mapAction.put("PageUp",hkPageUp);
mapAction.put("PageDown",hkPageDown);
mapAction.put("PageUp",hkInsert);
mapAction.put("PageDown",hkDelete);
} public void keyevent(int nkeycode)
{
int ncurtype;
switch(nkeycode)
{
case KeyEvent.VK_LEFT:
...
}}
ActionMap mapAction ;
HandlerKey hkLeft = new HandlerKey("LeftKey",KeyEvent.VK_LEFT);
HandlerKey hkRight = new HandlerKey("RightKey",KeyEvent.VK_RIGHT); private void setKeyMap(InputMap inputmap)
{
inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT,0),"LeftKey");
inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT,0),"RightKey");
inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_UP,0),"PageUp");
inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN,0),"PageDown");
inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT,0),"Insert");
inputmap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0),"Delete");
}
private void initKeyMap()
{
mapKeyInput= getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
setKeyMap(mapKeyInput);
mapKeyInput = getInputMap(JComponent.WHEN_FOCUSED);
setKeyMap(mapKeyInput);
mapKeyInput = getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
setKeyMap(mapKeyInput);
mapAction = getActionMap();
mapAction.put("LeftKey",hkLeft);
mapAction.put("RightKey",hkRight);
mapAction.put("PageUp",hkPageUp);
mapAction.put("PageDown",hkPageDown);
mapAction.put("PageUp",hkInsert);
mapAction.put("PageDown",hkDelete);
} public void keyevent(int nkeycode)
{
int ncurtype;
switch(nkeycode)
{
case KeyEvent.VK_LEFT:
...
}}
我想只要你判断了用户按下的是否是方向键就可以在相应的代码里实现了呀,跟一般的ActionListener事件差不多的.要不你把你的折线移动的代码帖出来,大家帮你改一下.
ProcessLine它是一个applet;代码如下:
package 过程线;import java.awt.*;import java.applet.Applet;
import javax.swing.*;
import java.awt.font.*;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.*;public class ProcessLine extends JApplet {
public void init() {
Object o = new Object();
Container contentPane =this.getContentPane();
SketchPanel panel = new SketchPanel();
contentPane.add(panel);
KeyHandler listener = new KeyHandler();
addKeyListener(listener);
}}
第二个类是:SketchPanel 它主要是实现过程线的表面。代码如下:(写的比较乱)package 过程线;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;public class SketchPanel extends JPanel
{
public int[] xPoints;
public int[] yPoints; public SketchPanel()
{
}
public void paint(Graphics g)
{
g.translate(100,100);//将坐标原点转换
g.setColor(Color.black);
g.drawLine(0,0,0,510);//画X坐标
g.drawLine(0,510,800,510);//画Y坐标
//画网格也就是刻度
g.setColor(Color.lightGray);
int x =0;
int y =0;
int x1=0;
int y1 =0; for (int i = 0; i <16; i++)
{
x = 0;
y += 30;
x1 = 800;
y1 += 30;
g.drawLine(x, y, x1, y1);
g.drawLine(0,0,800,0);
} int x2 =0;
int y2 =0;
int x3 =0;
int y3 = 510; for (int j = 0; j < 16; j++)
{
x2 += 50;
y2 = 0;
x3 += 50;
y3 = 510;
g.drawLine(x2, y2, x3, y3);
} //画折线 xPoints = new int[50];
int sun = -50;
for (int i = 0; i < xPoints.length; i++)
{
if (xPoints[i]>= 0 && xPoints[i] <= 900)
sun +=50;
xPoints[i] += sun;
//repaint();
} yPoints = new int[50];
for (int k = 0; k < yPoints.length; k++)
{
yPoints[k] = (int) (Math.random()*500 );
//repaint();
} //super.paint(g);
g.setColor(Color.red);
g.drawPolyline( xPoints, yPoints, xPoints.length); //传递节点
/*int xRect = -45;
for(int i=0;i<50;i++){ xRect +=45;
}
int yRect = 0;
for(int i=0;i<50;i++){
yRect = (int)(Math.random()*495);
}
int width = 10;
int height = 10;
g.setColor(Color.green);
g.fill3DRect(xRect,yRect,width,height,true);*/ //传递流量
int flux = -5;
int xString = -20;
int yString =540;
for(int i = 0;i<18;i++)
{
xString=-20;
yString -= 30;
flux += 5;
String s =String.valueOf(flux);
g.setColor(Color.black);
Font f= new Font("宋体",Font.BOLD,14);
g.setFont(f);
g.drawString(s,xString,yString);
} //传递日期
int month = 7;
xString = -100;
yString = 520;
for(int i=0;i<=8;i++)
{
month = 7;
xString += 100;
yString = 520;
g.setColor(Color.black);
Font f= new Font("宋体",Font.BOLD,14);
g.setFont(f);
String s1=String.valueOf(month);
g.drawString(s1,xString,yString);
}
int day =1;
xString = -80;
yString = 520;
for(int i=0;i<=8;i++)
{
day += 1;
xString +=100;
yString = 520;
g.setColor(Color.black);
Font f= new Font("宋体",Font.BOLD,14);
g.setFont(f);
String s2 = String.valueOf(day);
g.drawString(s2,xString,yString);
}
xString = -90;
yString = 520;
for(int i=0;i<=8;i++)
{
String s3 = "/";
xString +=100;
yString = 520;
g.setColor(Color.black);
Font f= new Font("宋体",Font.BOLD,14);
g.setFont(f);
g.drawString(s3,xString,yString);
}
}}
第三个类是KeyHandler,我想在这个类实现键盘事件。也就是左右移动,放大,缩小折线,还有就是在左右移动,放大,缩小折线的同时,X轴的日期也改变,我把左移设为“A”键,右移设为“D”键,放大设为“W”键,缩小设为“S”键,请问怎么在这里实现键盘事件;代码如下:
package 过程线;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.event.KeyEvent; public class KeyHandler extends SketchPanel implements KeyListener{
public void keyPressed(KeyEvent keyEvent) { int keyCode = keyEvent.getKeyCode();
} public void keyTyped(KeyEvent keyEvent) {
char keyChar = keyEvent.getKeyChar();
}
public void keyReleased(KeyEvent keyEvent) {
}}
你好,你能告诉我你所向我推荐的键盘事件详细描述吗?例如一些注释什么的。Thank you .
http://www.fruitfruit.com/vc/java/applet/AppletKeyExample.java