问答题

本题程序的功能是用键盘上的方向键来控制直线的绘制方向。如果一直按向上的方向键,则在窗口中从焦点开始向上缓慢绘制直线,按其他方向的方向键也会向对应的方向缓慢地绘制直线。如果按下Shift键,绘制直线的速度会加快。请将下述程序补充完整(注意:不得改动程序的结构,不得增行或删行)。
import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
public class advance

public static void main(String[] args)

SketchFrame frame = new SketchFrame();
frame.setDefaultCloseOperation(JFrame.EXIT ON CLOSE);
frame,show ();


class SketchFrame extends JFrame

public SketchFrame()

setTitle("advance");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
SketchPanel panel = new SketchPanel();
Container contentPane = getContentPane();
contentPane.add(panel);

public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;

class SketchPanel extends JPanel

______;

last = new Point2D.Double(100,100);
lines = new ArrayList();
KeyHandler listener = new KeyHandler();
______;
setFocusable(true);

public void add(int dx,int dy)

Point2D end = new Point2D.Double(last.getX()+ dx,last.getY() + dy);
Line2D line = new Line2D.Double(last,end);
lines.add(line);
repaint();
last = end;

public void paintComponent(Graphics g)

super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
for (int i = 0; i < lines.size(); i++)
g2 .draw ((Line2D) lines .get (i));

private Point2D last;
private ArrayList lines;
private static final int SMALL INCREMENT = i;
private static final int LARGE_INCREMENT = 5;
private class KeyHandler implements KeyListener

public void keyPressed(KeyEvent event)

______;
int d;
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);

public void keyReleased(KeyEvent event)


public void keyTyped(KeyEvent event)

char keyChar = event.getKeyChar();
int d;
if (Charaeter.isUpperCase(keyChar))

d = LARGE_INCREMENT;
keyChar = Character.toLowerCase(keyChar);

else
d = SMALL_INCREMENT;


【参考答案】

public SketchPanel()。
addKeyListener(listener)。
in......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

问答题
本题程序的功能是定义一个简单的计算器,可以进行基本的四则运算。程序中布局了16个按钮用来表示数字0~9及运算符和点号,程序顶部的文本框用来显示运算数及结果。请将下述程序补充完整(注意:不得改动程序的结构,不得增行或删行)。 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class simple public static void main (String[] args) try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); catch (Exception e) JFrame frame = new CalculatorFrame(); frame.show(); class CalculatorPanel extends JPanel implements ActionListener private JTextField display; private JButton btn; private double arg = 0; private String op = = ; private boolean start = true; public CalculatorPanel() setLayout(new BorderLayout()); display = new JTextField( 0 ); display.setEditable(false); add(display, North ); JPanel p = new JPanel(); p.setLayout(new GridLayout(4,4)); String buttons = 789 456 123-0.= + ; for (int i = 0; i < buttons.length(); i ++) btn = new JButton(buttons.substring(i,i + 1)); p.add(btn); ______; add(p, Center ); public void actionPerformed(ActionEvent evt) String s = evt.getActionCommand(); if (’0’< = s.charAt(0)&&s.charAt(0) <=’9’ ||s.equals( . )) if (start) display.setText(s); else display.setText(display.getText() + s); start = false; else if (start) if (s.equals( - )) display.setText(s); start = false; else op = s; else double x =______; calculate(x); op = s; start = true; public void calculate(double n) if (op.equals( + )) arg += n; else if(op.equals( - )) arg - = n; else if(op.equals( * )) arg *= n; else if(op.equals( )) arg = n; else if(op.equals( = )) arg=n; display.setText( + arg); class CalculatorFrame extends Jframe public CalculatorFrame() setTitle( simple ); setSize(220,180); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); Container contentPane=getContentPane(); contentPane.add(new CalculatorPanel());