在这篇文章中,我们将带领您了解JavaSwingJTable;右键单击菜单的全貌,包括如何使其“选择”又是突出显示行的相关情况。同时,我们还将为您介绍有关c#–当您右键单击菜单项时如何显示上下文菜单、
在这篇文章中,我们将带领您了解Java Swing JTable;右键单击菜单的全貌,包括如何使其“选择”又是突出显示行的相关情况。同时,我们还将为您介绍有关c# – 当您右键单击菜单项时如何显示上下文菜单、Cocoa:当您右键单击NSTableView的单元格时,如何使用上下文菜单、delphi – 如何正确显示基于资源管理器的右键单击菜单、Java Swing JTable的知识,以帮助您更好地理解这个主题。
本文目录一览:- Java Swing JTable;右键单击菜单(如何使其“选择”又是突出显示行)(java swing菜单栏)
- c# – 当您右键单击菜单项时如何显示上下文菜单
- Cocoa:当您右键单击NSTableView的单元格时,如何使用上下文菜单
- delphi – 如何正确显示基于资源管理器的右键单击菜单
- Java Swing JTable
Java Swing JTable;右键单击菜单(如何使其“选择”又是突出显示行)(java swing菜单栏)
简短:我需要一个“右键单击事件”来突出显示单元格行。
我在Java Swing(Netbeans
Matisse)的ScrollPane中使用JTable。我在JTable上有一个MouseClicked事件侦听器,该侦听器执行以下操作:
if (evt.getButton() == java.awt.event.MouseEvent.BUTTON3) { System.out.println("Right Click"); JPopUpMenu.show(myJTable, evt.getX(), evt.getY())}
问题是…每当我在JTable上单击鼠标右键时,该行都不会突出显示(我将选择设置为仅行行)。我已经寻找了几个setSelected()函数,但是找不到合适的函数。默认情况下,单击鼠标左键会自动突出显示该行。如何设置右键单击?
答案1
小编典典像这样:
table.addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { int r = table.rowAtPoint(e.getPoint()); if (r >= 0 && r < table.getRowCount()) { table.setRowSelectionInterval(r, r); } else { table.clearSelection(); } int rowindex = table.getSelectedRow(); if (rowindex < 0) return; if (e.isPopupTrigger() && e.getComponent() instanceof JTable ) { JPopupMenu popup = createYourPopUp(); popup.show(e.getComponent(), e.getX(), e.getY()); } }});
......
c# – 当您右键单击菜单项时如何显示上下文菜单
我已经能够捕获右键单击,禁用基本菜单的点击并弹出正确位置的上下文菜单,但是原始菜单会在失去焦点后立即消失.
在MFC中,通过使用TPM_RECURSE标志调用TrackPopupMenuEx来显示新的上下文菜单.
ContextMenu和.NET中的新的ContextMenuStrip类只有一个Show方法.有人知道如何在.NET中执行此操作?
编辑
我已经尝试通过p / invoke使用TrackPopupMenuEx,但是这限制了您使用ContextMenu而不是在我们的应用程序中不合适的ContextMenuStrip.它仍然不能正常工作.它不适用于新的MenuStrip和ContextMenuStrip.
我也尝试过子类化ToolStripMenuItem,看看我是否可以添加一个上下文菜单.这是为MenuStrip工作,但ContextMenuStrip仍然允许右键单击事件通过点击.
解决方法
在:
protected override void OnClick(EventArgs e) { if (SecondaryContextMenu == null || MouseButtons != MouseButtons.Right) { base.OnClick(e); } }
这部分
MouseButtons != MouseButtons.Right
应该和确实编译,因为它是一个调用Control.MouseButtons.由于Form继承Control类,所以直接调用MouseButtons属性就足够了.
希望这可以帮助:
public partial class Form1 : Form { class CustomToolStripMenuItem : ToolStripMenuItem { private ContextMenuStrip secondaryContextMenu; public ContextMenuStrip SecondaryContextMenu { get { return secondaryContextMenu; } set { secondaryContextMenu = value; } } public CustomToolStripMenuItem(string text) : base(text) { } protected override void dispose(bool disposing) { if (disposing) { if (secondaryContextMenu != null) { secondaryContextMenu.dispose(); secondaryContextMenu = null; } } base.dispose(disposing); } protected override void OnClick(EventArgs e) { if (SecondaryContextMenu == null || MouseButtons != MouseButtons.Right) { base.OnClick(e); } } } class CustomContextMenuStrip : ContextMenuStrip { private bool secondaryContextMenuActive = false; private ContextMenuStrip lastShownSecondaryContextMenu = null; protected override void dispose(bool disposing) { if (disposing) { if (lastShownSecondaryContextMenu != null) { lastShownSecondaryContextMenu.Close(); lastShownSecondaryContextMenu = null; } } base.dispose(disposing); } protected override void OnControlAdded(ControlEventArgs e) { e.Control.MouseClick += new MouseEventHandler(Control_MouseClick); base.OnControlAdded(e); } protected override void OnControlRemoved(ControlEventArgs e) { e.Control.MouseClick -= new MouseEventHandler(Control_MouseClick); base.OnControlRemoved(e); } private void Control_MouseClick(object sender,MouseEventArgs e) { ShowSecondaryContextMenu(e); } protected override void OnMouseClick(MouseEventArgs e) { ShowSecondaryContextMenu(e); base.OnMouseClick(e); } private bool ShowSecondaryContextMenu(MouseEventArgs e) { CustomToolStripMenuItem ctsm = this.GetItemAt(e.Location) as CustomToolStripMenuItem; if (ctsm == null || ctsm.SecondaryContextMenu == null || e.Button != MouseButtons.Right) { return false; } lastShownSecondaryContextMenu = ctsm.SecondaryContextMenu; secondaryContextMenuActive = true; ctsm.SecondaryContextMenu.Closed += new toolstripdropdownClosedEventHandler(SecondaryContextMenu_Closed); ctsm.SecondaryContextMenu.Show(Cursor.Position); return true; } void SecondaryContextMenu_Closed(object sender,toolstripdropdownClosedEventArgs e) { ((ContextMenuStrip)sender).Closed -= new toolstripdropdownClosedEventHandler(SecondaryContextMenu_Closed); lastShownSecondaryContextMenu = null; secondaryContextMenuActive = false; Focus(); } protected override void OnClosing(toolstripdropdownClosingEventArgs e) { if (secondaryContextMenuActive) { e.Cancel = true; } base.OnClosing(e); } } public Form1() { InitializeComponent(); CustomToolStripMenuItem itemPrimary1 = new CustomToolStripMenuItem("item primary 1"); itemPrimary1.SecondaryContextMenu = new ContextMenuStrip(); itemPrimary1.SecondaryContextMenu.Items.AddRange(new ToolStripMenuItem[] { new ToolStripMenuItem("item primary 1.1"),new ToolStripMenuItem("item primary 1.2"),}); CustomToolStripMenuItem itemPrimary2 = new CustomToolStripMenuItem("item primary 2"); itemPrimary2.DropDownItems.Add("item primary 2,sub 1"); itemPrimary2.DropDownItems.Add("item primary 2,sub 2"); itemPrimary2.SecondaryContextMenu = new ContextMenuStrip(); itemPrimary2.SecondaryContextMenu.Items.AddRange(new ToolStripMenuItem[] { new ToolStripMenuItem("item primary 2.1"),new ToolStripMenuItem("item primary 2.2"),}); CustomContextMenuStrip primaryContextMenu = new CustomContextMenuStrip(); primaryContextMenu.Items.AddRange(new ToolStripItem[]{ itemPrimary1,itemPrimary2 }); this.ContextMenuStrip = primaryContextMenu; } }
Cocoa:当您右键单击NSTableView的单元格时,如何使用上下文菜单
我试图子类化NSTableView并覆盖这个方法:
- (NSMenu *)menuForEvent:(NSEvent *)theEvent;
但它永远不会被称为.
另一方面,
- (void)rightMouseDown:(NSEvent *)theEvent;
得到叫.但我不知道这是我们想要的.
更多细节:
// // PTTableView.m // // // Created by Nathan Hazout on 5/31/11. // copyright 2011 __MyCompanyName__. All rights reserved. // #import "PTTableView.h" @implementation PTTableView - (id)init { self = [super init]; if (self) { // Initialization code here. } return self; } - (void)rightMouseDown:(NSEvent *)theEvent { NSLog(@"entered rightMouseDown"); } - (NSMenu *)menuForEvent:(NSEvent *)theEvent { NSLog(@"entered menuForEvent"); return [super menuForEvent:theEvent]; } - (NSView *)hitTest:(NSPoint)aPoint{ NSLog(@"entered hitTest"); return [super hitTest:aPoint]; } - (void)dealloc { [super dealloc]; } @end
rightMouseDown被调用. hiTest被多次呼叫但是menuForEvent没有.
解决方法
您可以在Interface Builder中通过将NSMenu对象放入nib文件中进行控制,并将其从表视图拖动到菜单以设置插座.
或者,您可以使用NSTableView(继承自NSResponder)的-setMenu:方法以编程方式分配菜单.
delphi – 如何正确显示基于资源管理器的右键单击菜单
Show the default right-click menu – Delphi
它运作良好,但有问题:
当我点击创建菜单时:删除(删除文件到回收) – 它问我:你确定要删除吗?
当我点击是 – 它工作正常,但当我点击否 – 它显示我的错误,
我在调试器中看到错误在线:
OleCheck(ContextMenu.InvokeCommand(CommandInfo)); Error: ###(gdb unparsed remainder:s 0x0 out of bounds>)###.
我使用Lazarus,但我认为,在Delphi中它也是实际的.
在我看来,菜单(窗口)尝试返回我的程序答案 – 不,并在这种情况下发生错误.
如何解决这个问题呢?如何正确解决这种情况并回答“否”?
解决方法
我的解释是,shell只是通知命令(删除操作)失败.失败是由于用户取消操作.我的建议是,根据需要相应地修改代码.您知道操作失败,但您可以选择忽略它,或者可能通知用户.也许是这样的:
var ... InvokeResult: HRESULT; begin ... // OleCheck(ContextMenu.InvokeCommand(CommandInfo)); InvokeResult := ContextMenu.InvokeCommand(CommandInfo); if not Succeeded(InvokeResult) then begin if LoWord(InvokeResult) = NO_ERROR then ShowMessage('Command did not carried out') else OleError(InvokeResult); end; ...
Java Swing JTable
Table 排序,
按照序号排序,如果序号没有值可能是新增变量或是没有进行过排序设置,
这种情况默认放在最后显示,一般进行了排序设置,就要对这些变量设置相应的序号 , 并保存到数据库中。
关于Java Swing JTable;右键单击菜单和如何使其“选择”又是突出显示行的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于c# – 当您右键单击菜单项时如何显示上下文菜单、Cocoa:当您右键单击NSTableView的单元格时,如何使用上下文菜单、delphi – 如何正确显示基于资源管理器的右键单击菜单、Java Swing JTable等相关知识的信息别忘了在本站进行查找喔。
本文标签: