使用Java SWT在其他列中工具提示?

我有一个有4列的表。 我尝试为第三列的所有单元格集成ToolTip。 使用我的代码,工具提示仅出现在第一列的单元格中。

这是我的代码:

protected void checkAction() throws Exception { System.out.println("Start Test"); //Erstellen einer neuen Shell final Shell shell = new Shell(); shell.setSize(280, 300); shell.setText("Testtabelle"); //Erstellen einer neuen Tabelle final Table table = new Table(shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION); table.setLinesVisible(true); table.setHeaderVisible(true); //Einlesen der Überschriften und Vergabe der Namen String[] titles = {"Element", "Stage", "Type", "Generate-User", "Change-User" }; for (int i = 0; i < titles.length; i++) { TableColumn column = new TableColumn(table, SWT.NONE); column.setText(titles[i]); } // Inhalte hinzufügen final int count = 4; for (int i = 0; i < count; i++) { TableItem item = new TableItem(table, SWT.NONE); item.setText(0, "Test "+i); item.setText(1, ""+(i+1)); item.setText(2, "Testtype"); item.setText(3, "562910"); item.setText(4, "423424"); } // Disable native tooltip table.setToolTipText (""); // Implement a "fake" tooltip final Listener labelListener = new Listener () { public void handleEvent (Event event) { Label label = (Label)event.widget; Shell shell = label.getShell (); switch (event.type) { case SWT.MouseDown: Event e = new Event (); e.item = (TableItem) label.getData ("_TABLEITEM"); // Assuming table is single select, set the selection as if // the mouse down event went through to the table table.setSelection (new TableItem [] {(TableItem) e.item}); table.notifyListeners (SWT.Selection, e); shell.dispose (); table.setFocus(); break; case SWT.MouseExit: shell.dispose (); break; } } }; Listener tableListener = new Listener () { Shell tip = null; Label label = null; public void handleEvent (Event event) { switch (event.type) { case SWT.Dispose: case SWT.KeyDown: case SWT.MouseMove: { if (tip == null) break; tip.dispose (); tip = null; label = null; break; } case SWT.MouseHover: { TableItem item = table.getItem (new Point (event.x, event.y)); if (item != null) { if (tip != null && !tip.isDisposed ()) tip.dispose (); tip = new Shell (shell, SWT.ON_TOP | SWT.NO_FOCUS | SWT.TOOL); FillLayout layout = new FillLayout (); layout.marginWidth = 2; tip.setLayout (layout); label = new Label (tip, SWT.NONE); label.setData ("_TABLEITEM", item); if (item.getText().equals("Test 3")){ label.setText ("Jonas Intfeld"); } else{ label.setText (item.getText ()); } label.addListener (SWT.MouseExit, labelListener); label.addListener (SWT.MouseDown, labelListener); Point size = tip.computeSize (SWT.DEFAULT, SWT.DEFAULT); Rectangle rect = item.getBounds (0); Point pt = table.toDisplay (rect.x, rect.y); tip.setBounds (pt.x, pt.y, size.x, size.y); tip.setVisible (true); } } } } }; table.addListener (SWT.Dispose, tableListener); table.addListener (SWT.KeyDown, tableListener); table.addListener (SWT.MouseMove, tableListener); table.addListener (SWT.MouseHover, tableListener); // Tabelle und Shell Packen for (int i = 0; i < titles.length; i++) { table.getColumn(i).pack(); } table.setSize(table.computeSize(SWT.DEFAULT, 200)); shell.pack(); // Shell öffnen try { shell.open(); } catch (SWTException e) { System.out.println("Test: "+e); shell.close(); } } 

有没有办法激活3. Column的Tooltip? 当我移动3.列中的单元格时,工具提示出现在1.列中。

也许最好的选择是按标题搜索列?

你的问题是这一行:

 Rectangle rect = item.getBounds(0); 

您要求第一列的边界。 只需将索引更改为您希望工具提示出现的列,您就可以了:

 Rectangle rect = item.getBounds(2); 

如果需要从鼠标位置获取列索引,请使用以下代码:

 Point point = new Point(event.x, event.y); int column = 0; for (int i = 0; i < table.getColumnCount(); i++) { if (item.getBounds(i).contains(point)) { column = i; break; } } Rectangle rect = item.getBounds(column);