亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

詳解Java圖形化編程中的鼠標事件設計

2019-11-26 14:56:28
字體:
來源:轉載
供稿:網友

鼠標事件的事件源往往與容器相關,當鼠標進入容器、離開容器,或者在容器中單擊鼠標、拖動鼠標時都會發生鼠標事件。java語言為處理鼠標事件提供兩個接口:MouseListener,MouseMotionListener接口。
MouseListener接口

MouseListener接口能處理5種鼠標事件:按下鼠標,釋放鼠標,點擊鼠標、鼠標進入、鼠標退出。相應的方法有:
(1) getX():鼠標的X坐標
(2) getY():鼠標的Y坐標
(3) getModifiers():獲取鼠標的左鍵或右鍵。
(4) getClickCount():鼠標被點擊的次數。
(5) getSource():獲取發生鼠標的事件源。
(6) addMouseListener(監視器):加放監視器。
(7) removeMouseListener(監視器):移去監視器。

要實現的MouseListener接口的方法有:
(1) mousePressed(MouseEvent e);
(2) mouseReleased(MouseEvent e);
(3) mouseEntered(MouseEvent e);
(4) mouseExited(MouseEvent e);
(5) mouseClicked(MouseEvent e);

【例】小應用程序設置了一個文本區,用于記錄一系列鼠標事件。當鼠標進入小應用程序窗口時,文本區顯示“鼠標進來”;當鼠標離開 窗口時,文本區顯示“鼠標走開”;當鼠標被按下時,文本區顯示“鼠標按下”,當鼠標被雙擊時,文本區顯示“鼠標雙擊”;并顯示鼠標的坐標。程序還顯示一個紅色的圓,當點擊鼠標時,圓的半徑會不斷地變大。

import java.applet.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;class MyPanel extends JPanel{  public void print(int r){    Graphics g = getGraphics();    g.clearRect(0,0,this.getWidth(),this.getHeight());    g.setColor(Color.red);    g.fillOval(10,10,r,r);  }}class MyWindow extends JFrame implements MouseListener{  JTextArea text;  MyPanel panel;  int x,y,r =10;  int mouseFlg=0;  static String mouseStates[]={"鼠標鍵按下","鼠標松開","鼠標進來","鼠標走開","鼠標雙擊"};  MyWindow(String s){    super(s);    Container con = this.getContentPane();    con.setLayout(new GridLayout(2,1));    this.setSize(200,300);    this.setLocation(100,100);    panel = new MyPanel();    con.add(panel);    text = new JTextArea(10,20);    text.setBackground(Color.blue);    con.add(text);    addMouseListener(this);    this.setVisible(true);    this.pack();  }  public void paint(Graphics g){    r = r+4;    if(r>80){      r=10;    }    text.append(mouseStates[mouseFlg]+"了,位置是:" +x+","+y+"/n");    panel.print(r);  }  public void mousePressed(MouseEvent e){    x = e.getX();    y = e.getY();    mouseFlg = 0;    repaint();  }  public void mouseRelease(MouseEvent e){    x = e.getX();    y = e.getY();    mouseFlg = 1;    repaint();  }  public void mouseEntered(MouseEvent e){    x = e.getX();    y = e.getY();    mouseFlg = 2;    repaint();  }  public void mouseExited(MouseEvent e){    x = e.getX();    y = e.getY();    mouseFlg = 3;    repaint();  }  public void mouseClicked(MouseEvent e){    if(e.getClickCount()==2){      x = e.getX();      y = e.getY();      mouseFlg = 4;      repaint();    }    else{}  }}public class Example6_8 extends Applet{  public void init(){    MyWindow myWnd = new MyWindow("鼠標事件示意程序");  }}

任何組件上都可以發生鼠標事件:鼠標進入、鼠標退出、按下鼠標等。例如,在上述程序中添加一個按鈕,并給按鈕對象添加鼠標監視器,將上述程序中的init()方法修改成如下形式,即能示意按鈕上的所有鼠標事件。

JButton button;public void init(){  button = new JButton(“按鈕也能發生鼠標事件”);  r = 10;  text = new JTextArea(15,20);  add(button);  add(text);  button.addMouseListener(this);}

如果程序希望進一步知道按下或點擊的是鼠標左鍵或右鍵,鼠標的左鍵或右鍵可用InputEvent類中的常量BUTTON1_MASK和BUTTON3_MASK來判定。例如,以下表達式判斷是否按下或點擊了鼠標右鍵:

  e.getModifiers()==InputEvent. BUTTON3_MASK


MouseMotionListener接口

MouseMotionListener接口處理拖動鼠標和鼠標移動兩種事件。

注冊監視器的方法是:
    addMouseMotionListener(監視器)
要實現的的接口方法有兩個:
(1) mouseDragged(MouseEvent e)
(2) mouseMoved(MouseEvent e)

【例】一個滾動條與顯示窗口同步變化的應用程序。窗口有一個方塊,用鼠標拖運方塊,或用鼠標點擊窗口,方塊改變顯示位置,相應水平和垂直滾動條的滑塊也會改變它們在滾動條中的位置。反之,移動滾動條的滑塊,方塊在窗口中的顯示位置也會改變。

import javax.swing.*;import java.awt.*;import java.awt.event.*;class MyWindow extends JFrame{  public MyWindow(String s){    super(s);    Container con = this.getContentPane();    con.setLayout(new BorderLayout());    this.setLocation(100,100);    JScrollBar xAxis = new JScrollBar(JScrollBar.HORIZONTAL,50,1,0,100);    jScrollBar yAxis = new jScrollBar(JScrollBar.VERTICAL,50,1,0,100);    MyListener listener = new MyListener(xAxis,yAxis,238,118);    Jpanel scrolledCanvas = new JPanel();    scrolledCanvas.setLayout(new BorderLayout());    scrolledCanvas.add(listener,BorderLayout.CENTER);    scrolledCanvas.add(xAix,BorderLayout.SOUTH);    scrolledCanvas.add(yAix,BorderLayout.EAST);    con.add(scrolledCanvas,BorderLayout.NORTH);    this.setVisible(true);    this.pack();  }  public Dimension getPreferredSize(){    return new Dimension(500,300);  }}class MyListener extends JComponent implements MouseListener, MouseMotionListener,AdjustmentListener{  private int x,y;  private JScrollBar xScrollBar;  private JScrollBar yScrollBar;  private void updateScrollBars(int x,int y){    int d;    d = (int)(((float)x/(float)getSize().width)*100.0);    xScrollBar.setValue(d);    d = (int)(((float)y/(float)getSize().height)*100.0);    yScrollBar.setValue(d);  }  public MyListener(JScrollBar xaxis,JScrollBar yaxis,int x0,int y0){    xScrollBar =xaxis;    yScrollBar =yaxis;    x = x0;    y=y0;    xScrollBar.addAdjustmentListener(this);    yScrollBar.addAdjustmentListener(this);    this.addMouseListener(this);    this.addMouseMotionListener(this);  }  public void paint(Graphics g){    g.setColor(getBackground());    Dimension size = getSize();    g.fillRect(0,0,size.width,size.height);    g.setColor(Color.blue);    g.fillRect(x,y,50,50);  }  public void mouseEntered(MouseEvent e){}  public void mouseExited(MouseEvent e){}  public void mouseClicked(MouseEvent e){}  public void mouseRelease(MouseEvent e){}  public void mouseMoved(MouseEvent e){}  public void mousePressed(MouseEvent e){    x = e.getX();    y = e.getY();    updateScrollBars(x,y);    repaint();  }  public void mouseDragged(MouseEvent e){    x = e.getX();    y = e.getY();    updateScrollBars(x,y);    repaint();  }  public void adjustmentValueChanged(AdjustmentEvent e){    if(e.getSource()==xScrollBar)      x=(int)((float)(xScrollBar.getValue()/100.0)*getSize().width);    else if(e.getSource()==yScrollBar)      y = (int)((float)(yScrollBar.getValue()/100.0)*getSize().height);    repaint();  }}public class Example6_9{  public static void main(){    MyWindow myWindow = new MyWindow("滾動條示意程序");  }}

上述例子中,如果只要求通過滑動滑塊,改變內容的顯示位置,可以簡單地使用滾動面板JScrollPane。如果是這樣,關于滾動條的創建和控制都可以免去,直接由JScrollPane內部實現。參見以下修改后的MyWindow的定義:

class MyWindow extends JFrame{  public MyWindow(String s){    super(s);    Container con = this.getContentPane();    con.setLayout(new BorderLayout());    this.setLocaltion(100,100);    MyListener listener = new MyListener();    listener.setPreferredSize(new Dimension(700,700));    JScrollPane scrolledCanvas = new JScrollPane(listener);    this.add(scrolledCanvas,BorderLayout.CENTER);    this.setVisible(true);    this.pack();  }  public Dimension getPreferredSize(){    return new Dimension(400,400);  }}

鼠標指針形狀也能由程序控制 ,setCursor()方法能設置鼠標指針形狀。例如,代碼setCursor(Cursor.getPredefinedCursor(cursor.WAIT_CURSOR))。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美高清视频| 国产香蕉97碰碰久久人人| 久久91亚洲精品中文字幕奶水| 国产精品免费在线免费| 国产成人在线一区二区| 精品中文字幕乱| 日韩美女在线观看| 日本国产精品视频| 深夜精品寂寞黄网站在线观看| 中文字幕日韩在线观看| 日韩精品免费视频| 国模视频一区二区三区| 成人444kkkk在线观看| 国产精品极品美女在线观看免费| 欧美体内谢she精2性欧美| 日本久久久久亚洲中字幕| 夜夜狂射影院欧美极品| 亚洲图片在区色| 色中色综合影院手机版在线观看| 欧美精品激情视频| 成人国产精品久久久久久亚洲| 欧美日韩亚洲精品一区二区三区| 国产成人91久久精品| 国产精品视频区| 91免费国产网站| 九九九热精品免费视频观看网站| 亚洲视频日韩精品| 2021久久精品国产99国产精品| 国产日韩在线视频| 亚洲成人激情在线| 精品亚洲一区二区三区四区五区| 亚洲福利在线视频| 亚洲欧美一区二区激情| 一本色道久久88综合亚洲精品ⅰ| 91久久在线观看| 国产激情综合五月久久| 亚洲欧美在线免费观看| 欧美日韩在线另类| 亚洲午夜久久久久久久| 精品视频久久久久久久| 国产成人欧美在线观看| 欧美乱人伦中文字幕在线| 国产日韩中文字幕| 久久人人爽人人爽人人片av高清| 欧美在线亚洲在线| 欧美丰满片xxx777| 成人高h视频在线| 久久久久久久影院| 国产91精品在线播放| 久久久久久这里只有精品| 亚洲视频视频在线| 亚洲欧美自拍一区| 色偷偷88888欧美精品久久久| 国产精品久久久久久久久久久新郎| 亚洲伊人成综合成人网| 久久国产天堂福利天堂| 91美女片黄在线观看游戏| 韩国v欧美v日本v亚洲| 亚洲最大av网| 78m国产成人精品视频| 国产精品久久久久久久app| 亚洲人在线观看| 在线观看欧美成人| 亚洲激情在线视频| 精品视频偷偷看在线观看| 欧美一级视频一区二区| 久色乳综合思思在线视频| 亚洲成人动漫在线播放| 7777精品久久久久久| 久久精品一区中文字幕| 色综合久久精品亚洲国产| 精品毛片三在线观看| 欧美日韩ab片| 午夜精品美女自拍福到在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产亚洲综合久久| 欧美亚洲成人精品| 国产大片精品免费永久看nba| 中文字幕精品在线| 影音先锋日韩有码| 欧美性69xxxx肥| 国产精品视频免费在线| 欧美肥婆姓交大片| 久久亚洲国产精品| 日韩中文字幕网| 国产成人自拍视频在线观看| 国产精品扒开腿做| 久久99亚洲热视| 欧美孕妇性xx| 成人写真视频福利网| 欧美一级视频一区二区| 色综合久久久久久中文网| 国产精品一二三视频| 日韩av中文在线| 91美女高潮出水| 国产福利视频一区二区| 久久成人人人人精品欧| 亚洲精品白浆高清久久久久久| 亚洲精品不卡在线| 97色在线视频观看| 91久久精品国产91性色| 久久成人免费视频| 精品中文字幕乱| 精品一区二区三区三区| 久久九九有精品国产23| 97视频色精品| 欧美老女人性视频| 国产丝袜一区二区| 性色av一区二区三区| 91精品综合久久久久久五月天| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久人人爽人人爽人人片av高清| 国产精品国产自产拍高清av水多| 国产噜噜噜噜噜久久久久久久久| 亚洲精品久久久久久久久久久久久| 91精品国产一区| 欧美午夜无遮挡| 日韩av在线网页| 欧美精品在线免费播放| 91精品久久久久久综合乱菊| 国产成人精品一区二区三区| 富二代精品短视频| 久久免费视频这里只有精品| 成人两性免费视频| 久久中文精品视频| 国产精品狼人色视频一区| 亚洲成人黄色在线| 欧美一区二区三区精品电影| 亚洲精品美女久久久| 久久精品久久久久久| 日韩电影中文字幕在线观看| 日韩电视剧在线观看免费网站| 黄网站色欧美视频| 国产精品99久久久久久人| 夜夜狂射影院欧美极品| 欧美日韩亚洲91| 久久频这里精品99香蕉| 国产噜噜噜噜噜久久久久久久久| 91经典在线视频| 日韩在线视频免费观看高清中文| 国产在线高清精品| 欧美制服第一页| 九色91av视频| 国产精品久久999| 久久精品成人动漫| 国产成一区二区| 国产午夜精品视频| 日韩在线观看高清| 欧美日韩一区二区三区在线免费观看| 亚洲a级在线观看| 欧美激情中文网| 色偷偷av一区二区三区| 国产女精品视频网站免费| 久久综合伊人77777| 精品在线小视频| 97视频在线观看视频免费视频| 日韩av在线天堂网| 亚洲四色影视在线观看| 黄色精品在线看| 久久久久久久久久久久久久久久久久av| 91精品中国老女人| 日韩精品中文字幕久久臀| 亚洲香蕉av在线一区二区三区| 日韩精品在线观看网站|