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

时间:2017-12-15 23:58:56

标签: java swing user-interface

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

如果没有覆盖getToolTipText(),是否有可能做到这一点?

1 个答案:

答案 0 :(得分: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);