A JTable is a JComponent, a JComponent is a Container, a Container is a Component, and all Components can add MouseListeners.addMouseListener(new MouseAdapter(){ public void mouseExited(MouseEvent e){ ...... } });
JTextField jl=new JTextField("this is a test"); boolean flag=false;
public Demomouse() { Container con=this.getContentPane(); con.setLayout(new BorderLayout()); con.add(jl,BorderLayout.NORTH); jl.addMouseMotionListener(new MouseMotionListener() { public void mouseDragged(MouseEvent e) { Point p=e.getPoint(); if(!jl.contains(p)) flag=true; } public void mouseMoved(MouseEvent e) { jl.setText("mouse is contains in label or mouse is not press"); jl.repaint(); } });
con.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { Point p=e.getPoint(); if(!jl.contains(p)) flag=true; else flag=false; if(flag) jl.setText("lost focus and mouse out"); else jl.setText("mouse is contains in label or mouse is not press"); jl.repaint();
} });
} public static void main(String args[]) { System.out.println("Starting Demomouse..."); Demomouse mainFrame = new Demomouse(); mainFrame.setSize(400, 400); mainFrame.setTitle("Demomouse"); mainFrame.setVisible(true); } }
楼上的绝对不是个好主意,而且His pigeon English is so poor. 我已经说过了,鼠标移出任何一个控件的事件是java.awt.event.MouseListener 的public void mouseExited(MouseEvent e),(移入是mouseEntered) 对你的jtable addMouseListener 一个监听 mouseExited的MouseListener, 对你的jtable的父容器,或整个窗口addMouseListener一个监听mouseClicked的MouseListener, 两个都true就可以了
但怎么判断鼠标已经移出了JTable区域了呢?应该不鼠标事件鉴听放到那个组件上呢?
public void mouseExited(MouseEvent e){
......
}
});
1\JTable的容器进行监听 当鼠标移出jtable 并且鼠标click一下,就要触发容器的事件.如下:package myprojects.demomouse;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class Demomouse extends JFrame {
JTextField jl=new JTextField("this is a test");
boolean flag=false;
public Demomouse() {
Container con=this.getContentPane();
con.setLayout(new BorderLayout());
con.add(jl,BorderLayout.NORTH);
jl.addMouseMotionListener(new MouseMotionListener()
{
public void mouseDragged(MouseEvent e)
{
Point p=e.getPoint();
if(!jl.contains(p)) flag=true;
} public void mouseMoved(MouseEvent e)
{ jl.setText("mouse is contains in label or mouse is not press");
jl.repaint();
}
});
con.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
Point p=e.getPoint();
if(!jl.contains(p)) flag=true;
else flag=false;
if(flag) jl.setText("lost focus and mouse out");
else jl.setText("mouse is contains in label or mouse is not press");
jl.repaint();
}
});
} public static void main(String args[]) {
System.out.println("Starting Demomouse...");
Demomouse mainFrame = new Demomouse();
mainFrame.setSize(400, 400);
mainFrame.setTitle("Demomouse");
mainFrame.setVisible(true);
}
}
我已经说过了,鼠标移出任何一个控件的事件是java.awt.event.MouseListener
的public void mouseExited(MouseEvent e),(移入是mouseEntered)
对你的jtable addMouseListener 一个监听 mouseExited的MouseListener,
对你的jtable的父容器,或整个窗口addMouseListener一个监听mouseClicked的MouseListener, 两个都true就可以了
其实,我做的东东是这样的。在一个JFrame里的左边是JTree,右边是一个JTable,点中一个JTable的单元格编辑其内容后,再点到JTree的叶子上,想让表格的单元格停止编辑。。就这么简单。。
本来想在表格单元格里加焦点监听,即单元格失去焦点后,立即结束编辑。。
另外一个思路就是我贴的帖子。。不知道大家怎么解决?