/**
@version 1.30 2000-06-03
@author Cay Horstmann
*/import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;public class Sketch
{
public static void main(String[] args)
{
SketchFrame frame = new SketchFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}/**
A frame with a panel for sketching a figure
*/
class SketchFrame extends JFrame
{
public SketchFrame()
{
setTitle("Sketch");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); // add panel to frame SketchPanel panel = new SketchPanel();
Container contentPane = getContentPane();
contentPane.add(panel);
} public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;
}/**
A panel for sketching with the keyboard.
*/
class SketchPanel extends JPanel
{
public SketchPanel()
{
last = new Point2D.Double(100, 100);
lines = new ArrayList();
KeyHandler listener = new KeyHandler();
addKeyListener(listener);
setFocusable(true);
} /**
Add a new line segment to the sketch.
@param dx the movement in x direction
@param dy the movement in y direction
*/
public void add(int dx, int dy)
{
// compute new end point
Point2D end = new Point2D.Double(last.getX() + dx,
last.getY() + dy); // add line segment
Line2D line = new Line2D.Double(last, end);
lines.add(line);
repaint(); // remember new end point
last = end;
} public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g; // draw all lines
for (int i = 0; i < lines.size(); i++)
g2.draw((Line2D)lines.get(i));
} private Point2D last;
private ArrayList lines;为什么我同时按shift键,向下键,向右键的时候非反应,而按shift键,向下键和一个其他非方向键的时候会有反应?
@version 1.30 2000-06-03
@author Cay Horstmann
*/import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;public class Sketch
{
public static void main(String[] args)
{
SketchFrame frame = new SketchFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}/**
A frame with a panel for sketching a figure
*/
class SketchFrame extends JFrame
{
public SketchFrame()
{
setTitle("Sketch");
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); // add panel to frame SketchPanel panel = new SketchPanel();
Container contentPane = getContentPane();
contentPane.add(panel);
} public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;
}/**
A panel for sketching with the keyboard.
*/
class SketchPanel extends JPanel
{
public SketchPanel()
{
last = new Point2D.Double(100, 100);
lines = new ArrayList();
KeyHandler listener = new KeyHandler();
addKeyListener(listener);
setFocusable(true);
} /**
Add a new line segment to the sketch.
@param dx the movement in x direction
@param dy the movement in y direction
*/
public void add(int dx, int dy)
{
// compute new end point
Point2D end = new Point2D.Double(last.getX() + dx,
last.getY() + dy); // add line segment
Line2D line = new Line2D.Double(last, end);
lines.add(line);
repaint(); // remember new end point
last = end;
} public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g; // draw all lines
for (int i = 0; i < lines.size(); i++)
g2.draw((Line2D)lines.get(i));
} private Point2D last;
private ArrayList lines;为什么我同时按shift键,向下键,向右键的时候非反应,而按shift键,向下键和一个其他非方向键的时候会有反应?
if (Event.isShiftDown())
d = LARGE_INCREMENT;
else
d = SMALL_INCREMENT;
if (keyCode == KeyEvent.VK_LEFT)
add(-d,0);
else if (keyCode == KeyEvent.VK_RIGHT)
add(d,0);
else if (keyCode == KeyEvent.VK_UP)
add(0,-d);
else if (keyCode == KeyEvent.VK_DOWN)
add(0,d);
可以看出要么按向下键,要么按向右键,要么按其他两个方向键,即四选一,所以同时按shift键,向下键,向右键的时候非反应。而其它非方向键因为未定义,所以按shift键,向下键和一个其他非方向键的时候会有反应。