2011-01-07 57 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应用程序中是不可能的。