2015-07-05 2 views
1

У меня проблема с подсказкой в ​​ячейке JTable. В моем настраиваемом ящике ячеек сделан вызов setToolTipText. Но при падении на ячейку таблицы всплывающая подсказка не отображается в правильном положении, хотя текст прав. Любая идея о том, как установить положение tootip для ячейки таблицы для класса рендеринга ячейки.Проблема с JTable-подсказкой с позицией дисплея

P.S Я не могу опубликовать реальный код здесь. Благодаря

Edit: Пример кода

import java.awt.Color; 


import bibliothek.extension.gui.dock.theme.EclipseTheme; 
import bibliothek.gui.DockController; 
import bibliothek.gui.dock.DefaultDockable; 
import bibliothek.gui.dock.SplitDockStation; 
import bibliothek.gui.dock.common.CControl; 
import bibliothek.gui.dock.common.CGrid; 
import bibliothek.gui.dock.common.DefaultSingleCDockable; 
import bibliothek.gui.dock.common.intern.CDockable; 
import bibliothek.gui.dock.common.theme.ThemeMap; 
import bibliothek.gui.dock.station.split.SplitDockProperty; 
import bibliothek.gui.dock.station.stack.tab.DefaultMenuLineLayoutFactory; 
import bibliothek.gui.dock.station.stack.tab.MenuLineLayout; 
import bibliothek.gui.dock.station.stack.tab.MenuLineLayoutOrder; 
import bibliothek.gui.dock.station.stack.tab.TabPane; 
import bibliothek.gui.dock.station.stack.tab.MenuLineLayoutOrder.Item; 
import bibliothek.gui.dock.util.AppletWindowProvider; 

import javax.swing.*; 

public class aaa { 
    public static void main(String[] args){ 

     try { 
      JFrame frame = new JFrame(); 
      AppletWindowProvider window = new AppletWindowProvider(frame); 
      CControl control = new CControl(window,true); 
      frame.add(control.getContentArea()); 
      control.setTheme(ThemeMap.KEY_ECLIPSE_THEME); 
      CGrid grid = new CGrid(control); 
       grid.add(10, 0, 62, 100, new DefaultSingleCDockable("AAA")); 
       grid.add(10, 0, 62, 100, new MyDock()); 
      grid.add(0, 0, 38, 100, new DefaultSingleCDockable("CCC")); 
      control.getContentArea().deploy(grid); 
      frame.setBounds(20, 20, 400, 400); 
      frame.setVisible(true); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 

    } 

    private static class MyDock extends DefaultSingleCDockable { 
     TestPane pane; 
     public MyDock() { 
      super("BBB"); 
      pane = new TestPane(); 
      add(pane); 
     } 
    } 
} 

И класс TestPane

import javax.swing.*; 
import javax.swing.table.DefaultTableCellRenderer; 
import javax.swing.table.DefaultTableModel; 
import java.awt.*; 
import java.awt.event.MouseEvent; 

public class TestPane extends JPanel { 

    public TestPane() { 
     setLayout(new BorderLayout()); 
     DefaultTableModel model = new DefaultTableModel(0, 10); 
     for (int row = 0; row < 10; row++) { 
      Object[] data = new Object[10]; 
      for (int col = 0; col < 10; col++) { 
       data[col] = row + "x" + col; 
      } 
      model.addRow(data); 
     } 

     JTable table = new JTable(model) { 
      public Point getToolTipLocation(MouseEvent event) { 

       Point p = this.getMousePosition(); 

       try{ 
        int x = event.getX();//p.x; 
        int y = event.getY();//p.y; 
        //System.out.println("$$$$$$$$$$$$$x :- "+x+" , y :- "+y); 
        return new Point(x,y); 
       }catch(Exception e) 
       { 

        System.out.println("Exception "+e.getMessage()); 

       } 



       return new Point(10, 10); 
      } 
     }; 
     table.setDefaultRenderer(Object.class, new TestCellRenderer()); 

     add(new JScrollPane(table)); 

    } 

    public class TestCellRenderer extends DefaultTableCellRenderer { 

     @Override 
     public Component getTableCellRendererComponent(JTable table, Object value, 
                 boolean isSelected, boolean hasFocus, int row, int column) { 
      setToolTipText("Banana @ " + value.toString()); 
      return super.getTableCellRendererComponent(table, value, isSelected, 
        hasFocus, row, column); 
     } 

    } 

} 
+0

Какое правильное положение для всплывающей подсказки – Madhan

+0

Опубликуйте хотя бы кусок кода (содержащий вызов setToolTipText). – Aleksandar

+1

опубликуйте [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверенный пример) или [SSCCE] (http://www.sscce.org/) (короткий, самосохраненный, правильный пример) , – Madhan

ответ

0

Без примера кода при условии, что я могу сказать следующее:

Используйте набор ToolTipText следующим образом:

JTable table = new JTable() { 
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
     Component c = super.prepareRenderer(renderer, row, column); 
     if (c instanceof JComponent) { 
      JComponent jc = (JComponent) c; 
      jc.setToolTipText(getValueAt(row, column).toString()); 
     } 
     return c; 
    } 
}; 

или вы можете использовать MouseEvent как предложено здесь:

JTable auditTable = new JTable(){ 

      //Implement table cell tool tips.   
      public String getToolTipText(MouseEvent e) { 
       String tip = null; 
       java.awt.Point p = e.getPoint(); 
       int rowIndex = rowAtPoint(p); 
       int colIndex = columnAtPoint(p); 

       try { 
        tip = getValueAt(rowIndex, colIndex).toString(); 
       } catch (RuntimeException e1) { 
        //catch null pointer exception if mouse is over an empty line 
       } 

       return tip; 
      } 
     }; 

Для источника этого фрагмента кода, посетите this и this SO вопросы.

Смежные вопросы