📄 39.txt
字号:
// import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.awt.geom.*;
import java.util.*;
// 显示框架,并得到屏幕像素
public class KeyTest
{
public static void main(String[] args)
{
EventFrame frame = new EventFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
// define Frame
class EventFrame extends JFrame
{
public EventFrame()
{
setSize(WIDTH, HEIGHT);
setTitle("键盘、鼠标测试");
// create a panel
EventPanel panel = new EventPanel();
// add panel to frame
Container contentPane = getContentPane();
contentPane.add(panel);
//draw a string
}
public static final int WIDTH = 400;
public static final int HEIGHT = 400;
}
// define panel
class EventPanel extends JPanel
{
//private String s ;
public EventPanel()
{
// sketch with keyboard
last = new Point2D.Double(200,300);
lines = new ArrayList();
KeyHandler listener = new KeyHandler(); // KeyHandler inside class
addKeyListener(listener);
// mouse opration
squares = new ArrayList();
current = null;
MouseHandler listener1 = new MouseHandler(); // MouseHandler inside class
MouseMotionHandler listener2 = new MouseMotionHandler(); // MouseMotionHandler inside class
addMouseListener(listener1);
addMouseMotionListener(listener2);
}
//copyButton.addActionListener(this);
//pasteButton.addActionListener(this);
public boolean isFocusTraversable()
{
return true;
}
// define
private Point2D last;
private ArrayList lines;
private ArrayList squares;
private Rectangle2D current;
private static final int SMALL_INCREMENT = 10;
private static final int LARGE_INCREMENT = 20;
private static final int SIDELENGTH = 10;
// draw line
public void addL (int x, int y)
{
Point2D end = new Point2D.Double(last.getX()+x,last.getY()+y);
Line2D line = new Line2D.Double(last ,end );
lines.add(line);
repaint();
last = end ;
}
//draw Rectangle
public Rectangle2D find(Point2D p)
{
for(int i=0;i<squares.size();i++)
{
Rectangle2D r = (Rectangle2D)squares.get(i);
if (r.contains(p)) return r;
}
return null;
}
public void addR (Point2D p)
{
double x = p.getX();
double y = p.getY();
current = new Rectangle2D.Double(
x-SIDELENGTH/2,y-SIDELENGTH/2,SIDELENGTH,SIDELENGTH);
squares.add(current);
repaint();
}
public void removeR(Rectangle2D r)
{
if (r==null) return;
if (r== current) current = null;
squares.remove(r);
repaint();
}
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)); //draw all
for (int i=0 ; i<squares.size();i++)
g2.draw((Rectangle2D)squares.get(i)); //draw all
}
/// class KeyHandler
private class KeyHandler implements KeyListener
{
public void keyPressed(KeyEvent event)
{
int keyCode = event.getKeyCode();
//
int d;
if(event.isShiftDown())
d = LARGE_INCREMENT;
else
d = SMALL_INCREMENT;
//add line segment
if (keyCode == KeyEvent.VK_LEFT)
addL(-d,0);
else if(keyCode == KeyEvent.VK_RIGHT)
addL(d,0);
else if(keyCode == KeyEvent.VK_DOWN)
addL(0,d);
else if(keyCode == KeyEvent.VK_UP)
addL(0,-d);
}
public void keyReleased(KeyEvent event)
{
}
public void keyTyped(KeyEvent event)
{
char keyChar = event.getKeyChar();
// set distance
int d ;
if (Character.isUpperCase(keyChar))
{
d = LARGE_INCREMENT;
keyChar = Character.toLowerCase(keyChar);
}
else
d = SMALL_INCREMENT;
//
if (keyChar == 'h') addL (-d,0);
else if(keyChar == 'l')
addL(d,0);
else if(keyChar == 'k')
addL(0,d);
else if(keyChar == 'j')
addL(0,-d);
}
}
//// mouse opration
private class MouseHandler extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
current = find(e.getPoint());
if(current == null)
addR(e.getPoint());
}
public void mouseClicked(MouseEvent e)
{
current = find(e.getPoint());
if (current != null && e.getClickCount()>=1)
removeR(current);
}
}
private class MouseMotionHandler implements MouseMotionListener
{
public void mouseDragged(MouseEvent e)
{
if(current != null)
{
int x = e.getX();
int y = e.getY();
//
current.setFrame(
x-SIDELENGTH/2,y-SIDELENGTH/2,SIDELENGTH,SIDELENGTH);
repaint();
}
}
// set mouse cursor MOVE_CURSOR
public void mouseMoved(MouseEvent e)
{
if (find(e.getPoint()) == null)
setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
else
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
}
}
//*/"键盘、鼠标测试"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -