簡體   English   中英

謂詞更改后如何更新ColourHighlighter(swingx)

[英]How do I update a ColourHighlighter (swingx) when the predicate has changed

我有一個名為ErrorHighlighter的類,該類在任何時候更改了名為errorString的屬性時都會得到通知。 基於此屬性更改事件,我更新了HighLighterPredicate以突出顯示帶有紅色背景的特定行。

ErrorHighlighter接收到屬性更改事件,它也更改了HighlighterPredicate,但是表行沒有更新為紅色背景。

我還更新了該行的工具提示。 這也沒有得到反映。

請參見下面的代碼。 有人可以幫忙嗎?

public class ErrorRowHighlighter extends ColorHighlighter implements PropertyChangeListener {

    private Map<Integer, String> rowsInError;
    private SwingObjTreeTable<ShareholderHistoryTable> treeTable;

    public ErrorRowHighlighter(SwingObjTreeTable<ShareholderHistoryTable> treeTable) {
        super(CommonConstants.errorColor, null);
        this.treeTable = treeTable;
        rowsInError=new HashMap<Integer, String>();
        setHighlightPredicate(new HighlightPredicate() {
            @Override
            public boolean isHighlighted(Component renderer, ComponentAdapter adapter) {
                if(rowsInError.containsKey(adapter.row)){
                    return true;
                }
                return false;
            }
        });
        this.treeTable.addMouseMotionListener(new MouseMotionAdapter() {
            @Override
            public void mouseMoved(MouseEvent e) {
                int row=ErrorRowHighlighter.this.treeTable.rowAtPoint(e.getPoint());
                if(rowsInError.containsKey(row)){
                    ErrorRowHighlighter.this.treeTable.setToolTipText(rowsInError.get(row));
                }else{
                    ErrorRowHighlighter.this.treeTable.setToolTipText(null);
                }
            }
        });
    }

    public void highlightRowWithModelDataAsError(ShareholderHistoryTable modelData){
        int indexForNodeData = treeTable.getIndexForNodeData(modelData);
        if(indexForNodeData>-1){
            rowsInError.put(indexForNodeData, modelData.getErrorString());
            updateHighlighter();
        }
    }

    public void unhighlightRowWithModelDataAsError(ShareholderHistoryTable modelData){
        int indexForNodeData = treeTable.getIndexForNodeData(modelData);
        if(indexForNodeData>-1){
            rowsInError.remove(indexForNodeData);
            updateHighlighter();
        }
    }

    public void updateHighlighter(){
        treeTable.removeHighlighter(this);
        treeTable.addHighlighter(this);
    }


    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        ShareholderHistoryTable sourceObject= (ShareholderHistoryTable) evt.getSource();
        if(StringUtils.isNotEmpty(sourceObject.getErrorString())){
            highlightRowWithModelDataAsError(sourceObject);
        }else{
            unhighlightRowWithModelDataAsError(sourceObject);
        }
    }
} 

我看來這是一個錯誤。 方法treeTable.getIndexForNodeData()實際上通過對基礎樹數據結構進行預遍歷來返回該行的索引。 這包括未在jxtreetable上顯示的根節點。 因此我需要從指數中減去1

int indexForNodeData = treeTable.getIndexForNodeData(modelData)-1; 

這為我解決了問題。 如果有人想看看ColorHighlighter和屬性更改偵聽器的示例,我將離開而不是刪除它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM