问答题

本题的功能是用键盘上的方向键来控制直线的绘制方向。如果一直按向上的方向键,则在窗口中从焦点开始向上缓慢绘制直线,按其他方向键也会向对应的方向缓慢地绘制直线,如果按下<Shift>键的话,绘制直线的速度会加快。
import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
public class java3
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("java3");
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
public void sketchPanel()
last=new Point2D.Double(100,100);
lines=new ArrayList();
KeyHandler listener=new KeyHandler();
addkeyListener(this);
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=1;
private static final int LARGE_INCREMENT=5;
private class KeyHandler implements KeyListener
public void keyPressed(KeyEvent event)
KEY keyCode=event.getKeyCode();
int d;
if (event isShiftDnwn ())
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(Character.isUpperCase(keyChar))
d=LARGE_INCREMENT;
keyChar=Character.toLowerCase(keyChar);
else
d=SMALL_INCREMENT;

【参考答案】

第1处:pulic SketchPanel()
第2处:addKeyListener(listener)......

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

多项选择题
本题中,用表格表现某个月的月历,其中标题是从Sunday到Saturday,表格中的各项是可以修改的。 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class java2 public static void main(String[]args) try UIManager.setLookAndFeeI(UIManager.getSystemLookAndFeelClassName()); catch(Exception e) JFrame frame=new CalendarTableFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.show(); class CalendarTableFrame extends JFrame private static final int WIDTH=500; private static final int HEIGHT=150; private______cells= null,null,null,new Integer(1),new Integer(2),new Integer(3),new Integer(4), new Integer(5),new Integer(6),new Integer(7),new Integer(8),new Integer(9),new Integer(10),new Integer(11)), new Integer(12),new Integer(13),new Integer(14),new Integer(15),new Integer(16),new Integer(17),newInteger(18)), new Integer(19),new Integer(20),new Integer(21),new Integer(22),new Integer(23),new Integer(24),newInteger(25)), new Integer(26),new Integer(27),new Integer(28),new Integer(29),new Integer(30),new Integer(31),null ; private String[]columnNames= Sunday , Monday , Tuesday , Wednesday , Thursday , Friday , Saturday ; public CalendarTableFrame() setTitle( java2 ); setSize(WIDTH,HEIGHT); JTable table=new______; getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
本题中,用表格表现某个月的月历,其中标题是从Sunday到Saturday,表格中的各项是可以修改的。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
public class java2
public static void main(String[]args)
try
UIManager.setLookAndFeeI(UIManager.getSystemLookAndFeelClassName());
catch(Exception e)
JFrame frame=new CalendarTableFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
class CalendarTableFrame extends JFrame
private static final int WIDTH=500;
private static final int HEIGHT=150;
private______cells=
null,null,null,new Integer(1),new Integer(2),new Integer(3),new Integer(4),
new Integer(5),new Integer(6),new Integer(7),new Integer(8),new Integer(9),new Integer(10),new Integer(11)),
new Integer(12),new Integer(13),new Integer(14),new Integer(15),new Integer(16),new Integer(17),newInteger(18)),
new Integer(19),new Integer(20),new Integer(21),new Integer(22),new Integer(23),new Integer(24),newInteger(25)),
new Integer(26),new Integer(27),new Integer(28),new Integer(29),new Integer(30),new Integer(31),null
;
private String[]columnNames=
"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
;
public CalendarTableFrame()
setTitle("java2");
setSize(WIDTH,HEIGHT);
JTable table=new______;
getContentPane().add(new JScrollPane(table),
BorderLayout.CENTER);