在jTable中为单元格设置工具提示,而不覆盖getToolTipText()

问题描述 投票:0回答:1

我正在使用NetBeans GUI Builder(Swing)制作gui,并且需要为标题中的每个单元格设置不同的工具提示。问题是jTable是自动生成的,所以我不能覆盖它的方法。

没有压倒性的getToolTipText(),有没有可能做到这一点?

java swing user-interface
1个回答
0
投票

执行此类操作的一种方法是添加一个扩展MouseMotionAdapter的子类,并为您的代码添加一个方法来执行任务。只需将以下SubClass代码放在主类的末尾下方即可。

class JTableColumnHeaderToolTips extends MouseMotionAdapter {
    TableColumn curCol;
    // Create a Map to hold the Header Column 
    // index value and the tooltip related to 
    // it.
    Map headerColumnTips = new HashMap();

    // Method to Set tips into Map.
    public void setHeaderColumnToolTip(TableColumn column, String tooltip) {
        if (tooltip == null) {
            headerColumnTips.remove(column);
        } 
        else {
            headerColumnTips.put(column, tooltip);
        }
    }

    // Override the Header's mouseMoved event so as 
    // to display the appropriate tooltip for whatever
    // column the mouse pointer is currently on.
    @Override
    public void mouseMoved(MouseEvent event) {
        JTableHeader header = (JTableHeader) event.getSource();
        JTable table = header.getTable();
        TableColumnModel colModel = table.getColumnModel();
        int colIndex = colModel.getColumnIndexAtX(event.getX());
        TableColumn column = null;
        if (colIndex >= 0) {
            column = colModel.getColumn(colIndex);
        }
        if (column != curCol) {
            header.setToolTipText((String) headerColumnTips.get(column));
            curCol = column;
        }
    }
}

然后在主类中的某处添加此方法setJTableColumnToolTips():

private void SetJTableHeaderColumnToolTips(JTable table, String[] columnToolTips) {
    JTableHeader tableHeader = table.getTableHeader();

    // See the JTableColumnHeaderToolTips SubClass. 
    JTableColumnHeaderToolTips toolTips = new JTableColumnHeaderToolTips();
    for (int col = 0; col < table.getColumnCount(); col++) {
        TableColumn columnIndex = table.getColumnModel().getColumn(col);
        toolTips.setHeaderColumnToolTip(columnIndex, columnToolTips[col]);
    }
    tableHeader.addMouseMotionListener(toolTips);
}

要使用此方法,您可以这样做:

// Provide the Tooltips you want for
// each column within a String Array.
String[] columnToolTips = {"First Name",
            "Last Name",
            "The person's address",
            "The person's phone number",
            "The person's age",
            "The person's salary"};

// Set your desired ToolTips to the Header Column cells
setJTableHeaderColumnToolTips(recordsTable, columnToolTips);
© www.soinside.com 2019 - 2024. All rights reserved.