您的位置:首页 > 编程语言 > Java开发

JAVA笔记【20131219】

2013-12-19 22:48 225 查看
一、低级事件

键盘事件补充:

键盘中有表示动作的键,对应的KeyEvent中isActionKey方法会对是否是动作键进行判断。

动作键有:HOME,END,PAGE UP,PAGE DOWN,UP,DOWN,LEFT,RIGHT,F1~F24,PRINT SCREEN,SCROLL LOCK,CAPS LOCK, 

                    NUM LOCK,PAUSE,INSERT,DELETE,ENTER,BACKSPACE和TAP

鼠标事件:当用户点击鼠标按钮时,将会调用三个监听器方法。按下鼠标时调用mousePressed,鼠标释放时调用mouseReleased最后调用mouseClicked。

MouseEvent事件对象调用getX和getY方法将返回鼠标按下时鼠标指针所在的X和Y坐标。要想区分鼠标的单击、双击和三击,需要调用getClickCount方法。

MouseListener中提供了mouseClicked(鼠标按键在组件上按下并释放时调用),mousePressed(鼠标按键在组件上按下时调用),mouseReleased(鼠标按钮在组件上释放时调用),mouseEntered(鼠标进入到组件上时调用),mouseExited(鼠标离开组件时调用)。

MouseMotionListener中提供了mouseDragged(鼠标按键在组件上按下并拖动时调用),mouseMoved(鼠标光标移动到组件上但无按键按下时调用)。

光标的形状,可以通过调用Cursor类中的getPredefinedCursor方法来获取预先定义的光标,再调用组件的setCursor方法即可设置。当然也可以利用Toolkit类中的createCustomCursor方法自己定义光标样式。

Toolkit tk = Toolkit.getDefaultToolkit();
Image img = tk.getImage("2b.jpg");
Cursor newCursor = tk.createCustomCursor(img,new Point(10,10),"new Cursor");

createCustomCursor方法中第一个参数指向光标图像,第二个参数是光标偏移,第三个参数是光标描述。
import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.util.ArrayList;
public class MouseFrameTest01
{
public static void main(String[] args)
{
MouseFrame sp = new MouseFrame();
sp.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口是操作
sp.setVisible(true); //显示组件
sp.setTitle("MouseWindow"); //标题栏
}
}

class MouseFrame extends JFrame
{
public MouseFrame()
{
MousePanel mp = new MousePanel();
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT); //设置组件宽度和高度
//setResizable(false); //设置组件大小是否可调节
add(mp);
}
public static final int DEFAULT_WIDTH = 650;
public static final int DEFAULT_HEIGHT = 350;
}

class MousePanel extends JPanel
{
public MousePanel()
{
rect2D = new ArrayList<Rectangle2D>();
MouseListener mousL = new MouseLis();
MouseMotionListener mouseMl = new MouseMLis();
addMouseListener(mousL);
addMouseMotionListener(mouseMl);
JButton clearB = new JButton("清除");
add(clearB);
ActionListener act = new ClActionListener();
clearB.addActionListener(act);
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D gps2D = (Graphics2D)g ;
//图形颜色
gps2D.setPaint(Color.BLUE);
for(Rectangle2D r2d:rect2D)
{
gps2D.draw(r2d);
}
}

public void add(Point2D e)
{
double x = e.getX();
double y = e.getY();
Rectangle2D temp2d = new Rectangle2D.Double(x-side/2,y-side/2,side,side);
rect2D.add(temp2d);
repaint();
}

public void remove(Rectangle2D e)
{
if(e==null)
return;
else
{
rect2D.remove(e);
currentR2D=null;
}
repaint();
}

public Rectangle2D findR2D(Point2D e)
{
for(Rectangle2D r:rect2D)
{
if(r.contains(e.getX(),e.getY()))
return r;
}
return null;
}

class MouseLis extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
currentR2D = findR2D(e.getPoint());
if(currentR2D == null)
{
add(e.getPoint());
}
}

public void mouseClicked(MouseEvent e)
{
if((currentR2D != null)&&(e.getClickCount()>=2))
{
remove(currentR2D);
}
}
}

class MouseMLis extends MouseMotionAdapter
{
public void mouseDragged(MouseEvent e)
{
double x = e.getX();
double y = e.getY();

if(currentR2D != null)
{
currentR2D.setFrame(x-side/2,y-side/2,side,side);
repaint();
}
}
public void mouseMoved(MouseEvent e)
{
currentR2D = findR2D(e.getPoint());
if(currentR2D != null)
{
//newCursor = Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR);
Toolkit tk = Toolkit.getDefaultToolkit();
Image img = tk.getImage("2b.jpg");
newCursor = tk.createCustomCursor(img,new Point(5,5),"new Cursor");
}
else
{
newCursor = Cursor.getDefaultCursor();
}
setCursor(newCursor);
}
}

class ClActionListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
rect2D.clear();
repaint();
}
}

private Cursor newCursor;
private ArrayList<Rectangle2D> rect2D;
private Rectangle2D currentR2D;
private static final int side =10;
}

运行结果:



焦点事件:

鼠标可以指向屏幕上的任何一个对象,但使用键盘输入时,必须定位于一个特定的屏幕对象。在任何时候只有一个窗口是活动的。

在一个窗口中,最多只有一个组件拥有焦点。当用户点击另外组件的时候,原组件失去焦点,被点击的组件获得焦点。可以使用TAB在各组件之间切换焦点。

键盘焦点管理器获得

KeyboardFocusManager keyboardManager = KeyboardFocusManager.getCurrentKeyboardFocusManager


获取当前拥有焦点的组件
Component owner = keyboardManager.getFocusOwner();


获取当前拥有焦点的窗口
Window owWin = keyboardManager.getFocusedWindow();


获得当前活动窗口
Window actWin = keyboardManager.getActiveWindow();


组件焦点监听器接口FocusListener,有focusGained(组件获得键盘焦点时调用)和focusLost(组件失去键盘焦点时调用)。
FocusEvent事件中getComponent方法用于报告获得或者失去焦点的组件。isTemporary方法在焦点是临时性失去的时候返回true,例如当由一个窗口切换到另外一个窗口时,组件临时性失去焦点,当切换回来的时候又是原来的组件获得焦点。

窗口焦点事件

窗口焦点事件监听器WindowFocusListener包含了窗口获得焦点windowGainedFocus(WindowEvent e)和窗口失去焦点windowLostFocus(WindowEvent e)

对等物

焦点由一个组件或者窗口转移到另外一个组件或者窗口时,这两个组件或者窗口叫做对等物。

FocusEvent 中getOppositeComponent()方法用于获取对等组件,WindowEvent中getOppositeWindow()方法用于获取对等窗口。

当组件在焦点窗口时,可以调用组件的requestFocusInWindow方法获取焦点,但不能根据该方法的返回值判定是否获取到焦点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息