2011-01-07 58 views

回答

1

鴕鳥政策是這麼認爲的,因爲沙箱you're運行的

0

一些耐人尋味:使用點Java來檢測點擊發生的位置。 http://download.oracle.com/javase/1.4.2/docs/api/java/awt/Point.html

無可否認,香港專業教育學院只有一次使用它之前在一個表像檢測行,但似乎最接近於香港專業教育學院發現回答您的QN:

public void mouseClicked(MouseEvent e) { 
    JTable target = (JTable)e.getSource(); 
    //get the coordinates of the mouse click 
    Point p = e.getPoint(); 
    //get the row index that contains that coordinate 
    row= target.rowAtPoint(p); 
} 

對不起,如果這不是你在找什麼,但除此之外,點擊組件是唯一的出路。什麼是替代點擊容器?那麼這只是沒有任何意義呢?

0

據我所知,有沒有簡單的方法來完成你想要的。但是你要能夠做到..那麼對於現代的方式是什麼來完成這個任務,我建議你檢查java.awt.Dialog中的表演方法..

package mouseclickevent; 
import java.awt.AWTEvent; 
import java.awt.Component; 
import java.awt.EventQueue; 
import java.awt.MenuComponent; 
import java.awt.Toolkit; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import java.awt.event.MouseEvent; 
import java.lang.reflect.Method; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 


public class FrmEvent extends JFrame { 
    public FrmEvent(){ 
     JPanel panel = new JPanel(); 
     getContentPane().add(panel); 
     JButton btn = new JButton("Test"); 
     panel.add(btn); 
     panel.add(new JTextField("Test")); 
     btn.addActionListener(new ActionListener() { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
       FrmEvent frm = new FrmEvent(); 
       frm.setBounds(300,300, 200, 200); 
       frm.show(); 

      } 
     }); 

    } 

    private void consumeEvents() { 
     try { 
      if (Thread.currentThread().getClass().getName().endsWith(
      "EventDispatchThread")) { 
       EventQueue eq = null; 
       eq = Toolkit.getDefaultToolkit().getSystemEventQueue(); 

       if (eq == null) { 
        return; 
       } 
       while (isVisible() || isShowing()) { 
        AWTEvent event = eq.getNextEvent(); 
        Object src = event.getSource(); 
        Class kActiveEvent= Class.forName("java.awt.ActiveEvent"); 
        if (kActiveEvent != null) { 
         if (kActiveEvent.isInstance(event)) { 
          Method m; 
          Class types[] = {}; 
          Object args[] = {}; 
          m = kActiveEvent.getMethod("dispatch", types); 

          if (m != null) { 
           m.invoke(event, args); 
           continue; 
          } 
         } 
        } 
        dispatchEvent(src, event); 
       } 
      } 

     } 
     catch (Exception e) { 
      e.printStackTrace(); 
      throw new RuntimeException(e); 
     } 
    } 
    private void dispatchEvent(Object src, AWTEvent event) { 
     if (event.getID()== MouseEvent.MOUSE_CLICKED) { 
      System.out.println("mouseClicked"); 
     } 
     if (src instanceof Component) { 
      ((Component) src).dispatchEvent(event); 
     } else if (src instanceof MenuComponent) { 
      ((MenuComponent) src).dispatchEvent(event); 
     } 
    } 

    public void show(){ 
     super.show(); 
     consumeEvents(); 
    } 

    public static void main(String[] args) { 

     FrmEvent frm = new FrmEvent(); 
     frm.setBounds(300,300, 200, 200); 
     frm.show(); 

    } 
} 
1

這是完全可能的,如果你願意使用第三方庫 - JNativeHook

它使用JNI提供這些功能,否則在純java應用程序中是不可能的。