我在为这段代码编写测试时遇到了问题,并且不知道怎么做。
当按下其中一个键长度为1时,此代码绘制一条线。 按住shift键会产生一条长度为5的线。 我需要测试是否为每种情况绘制一条具有正确长度参数的行。
class SketchPanel extends JPanel {
private Point2D last;
private final ArrayList<Line2D> lines;
private static final int SMALL_INCREMENT = 1;
private static final int LARGE_INCREMENT = 5;
public SketchPanel() {
super();
last = new Point2D.Double(100, 100);
lines = new ArrayList<>();
KeyHandler listener;
listener = new KeyHandler();
addKeyListener(listener);
setFocusable(true);
}
public void add(final int dexX, final int dexY) {
Point2D end;
end = new Point2D.Double(last.getX() + dexX, last.getY() + dexY);
Line2D line;
line = new Line2D.Double(last, end);
lines.add(line);
repaint();
last = end;
}
@Override
public void paintComponent(final Graphics graph) {
super.paintComponent(graph);
Graphics2D graph2 = (Graphics2D) graph;
lines.forEach((s) -> graph2.draw(s));
}
private class KeyHandler implements KeyListener {
@Override
public void keyPressed(final KeyEvent event) {
final int keyCode = event.getKeyCode();
int dex = 0;
if (event.isShiftDown()) {
dex = LARGE_INCREMENT;
} else {
dex = SMALL_INCREMENT;
}
switch (keyCode) {
case KeyEvent.VK_LEFT:
add(-dex, 0);
break;
case KeyEvent.VK_RIGHT:
add(dex, 0);
break;
case KeyEvent.VK_UP:
add(0, -dex);
break;
case KeyEvent.VK_DOWN:
add(0, dex);
break;
default:
break;
}
}
@Override
public void keyReleased(final KeyEvent event) {}
@Override
public void keyTyped(final KeyEvent event) {
char keyChar = event.getKeyChar();
int dex;
if (Character.isUpperCase(keyChar)) {
dex = LARGE_INCREMENT;
keyChar = Character.toLowerCase(keyChar);
} else {
dex = SMALL_INCREMENT;
}
switch (keyChar) {
case 'h':
add(-dex, 0);
break;
case 'l':
add(dex, 0);
break;
case 'k':
add(0, -dex);
break;
case 'j':
add(0, dex);
break;
default:
break;
}
}
}