java - JTable 工具提示显示位置问题

标签 java user-interface tooltip

我在 JTable 单元格中的工具提示上遇到问题。在我的自定义单元格渲染器中,调用了 setToolTipText。但是,将鼠标悬停在表格单元格上时,尽管文本是正确的,但工具提示并未显示在正确的位置。关于如何为单元格渲染器类的表格单元格设置提示位置的任何想法。

P.S 我无法在这里发布实际代码。 谢谢

编辑: 示例代码

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);
        }

    }

}

最佳答案

如果没有提供任何代码示例,我可以这样说:

使用设置工具提示文本如下:

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;
            }
        };

有关此代码片段的来源,请访问 thisthis所以问题。

关于java - JTable 工具提示显示位置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31230122/

相关文章:

google-chrome - 谷歌浏览器禁用标签工具提示弹出窗口

javascript - 拉斐尔悬停错误?

java - 绕过 PUT 请求的唯一性 validator

java - RecyclerView 轮类项目

java - 应用程序在从 Android Studio 运行时工作正常,但在安装签名的 apk 时崩溃

iphone - 得到了[Not A Type class]:消息发送到释放实例错误?

java - HashSet contains() 方法

user-interface - 命令/应用层映射的用例 : Implementation

java - 为什么我的文本区域不显示

jquery 工具提示不完全可见