Swing添加鼠標右鍵菜單單擊選擇監聽,並顯示右鍵菜單
public static final void initMouseInputListener(final JComponent component, final JPopupMenu popupMenu,
boolean enableRightKey)
{
final MouseInputListener mouseInputListener = getMouseInputListener(component, popupMenu, enableRightKey);
component.addMouseListener(mouseInputListener);
component.addMouseMotionListener(mouseInputListener);
}
/**
* 添加鼠標右鍵單擊選擇監聽,並顯示右鍵菜單.<br/>
*
* @param table
* @param popupMenu
* @param enableRightKey
* @return MouseInputListener
*/
public static final MouseInputListener getMouseInputListener(final JComponent component,
final JPopupMenu popupMenu, final boolean enableRightKey)
{
return new MouseInputListener()
{
public void mouseClicked(MouseEvent e)
{
processEvent(e);
}
public void mousePressed(MouseEvent e)
{
processEvent(e);
}
public void mouseReleased(MouseEvent e)
{
if (e.getSource() instanceof JScrollPane)
{
JScrollPane scrollPane = (JScrollPane) e.getSource();
if (scrollPane.getViewport().getComponent(0) instanceof JTable)
{
JTable jtb = (JTable) scrollPane.getViewport().getComponent(0);
DefaultCellEditor dce = (DefaultCellEditor) jtb.getCellEditor();
if (dce != null)
{
dce.stopCellEditing();
}
jtb.getSelectionModel().clearSelection();
}
}
processEvent(e);
if ((e.getModifiers() & MouseEvent.BUTTON3_MASK) != 0 && !e.isControlDown() && !e.isShiftDown())
{
// 右鍵菜單顯示
popupMenu.show(component, e.getX(), e.getY());
}
}
public void mouseEntered(MouseEvent e)
{
processEvent(e);
}
public void mouseExited(MouseEvent e)
{
processEvent(e);
}
public void mouseDragged(MouseEvent e)
{
processEvent(e);
}
public void mouseMoved(MouseEvent e)
{
processEvent(e);
}
private void processEvent(MouseEvent e)
{
if (enableRightKey)
{
int modifiers = e.getModifiers();
boolean isRow = false;
if ((modifiers & MouseEvent.BUTTON3_MASK) != 0)
{
modifiers -= MouseEvent.BUTTON3_MASK;
// 將右鍵改成左鍵
modifiers |= MouseEvent.BUTTON1_MASK;
if (e.getSource() instanceof JTable)
{
JTable table = (JTable) e.getSource();
int selIndex = table.rowAtPoint(e.getPoint());
int[] indexs = table.getSelectedRows();
if (selIndex >= 0 && indexs.length > 1)
{
for (int in : indexs)
{
if (selIndex == in)
{
isRow = true;
}
}
}
else
{
isRow = false;
}
}
if (!isRow)
{
MouseEvent ne = new MouseEvent(e.getComponent(), e.getID(), e.getWhen(), modifiers,
e.getX(), e.getY(), e.getClickCount(), false);
component.dispatchEvent(ne);
}
return;
}
}
}
};
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.