2015-11-04 42 views
1

我正在做我的自定義啓動配置類型。我實現了啓動配置選項卡並面對奇怪的問題。當我做到以下幾點時日食 - 自定義啓動配置 - 應用/還原按鈕

private void update() { 
    setDirty(true); 
    updateLaunchConfigurationDialog(); 
} 

在我的啓動配置選項卡類的一個地方,它工作正常,並且應用按鈕變爲啓用狀態。但是當我在另一個地方做,它不起作用。我在https://www.eclipse.org/forums/index.php/t/164755/找到類似的東西,但它並沒有幫助我解決這個問題。

請參見下面的代碼片段。

addButton.addMouseListener(new MouseListenerAdapter() { 

     @Override 
     public void mouseDown(MouseEvent e) { 
      moveSelectionToTableViewer(tree.getViewer().getTree().getSelection()); 
      table.refresh(); 
      update(); // Apply button is enabled 
     } 

     private void moveSelectionToTableViewer(TreeItem[] selection) { 
      // ... 
     } 
    }); 

    removeButton.addMouseListener(new MouseListenerAdapter() { 

     @Override 
     public void mouseDown(MouseEvent e) { 
      int[] selectionIndices = table.getTable().getSelectionIndices(); 
      table.getTable().remove(selectionIndices); 
      tree.getViewer().refresh(); 
      update(); // Apply button is NOT enabled! 
     } 
    }); 

我該如何解決這個問題?

+1

可能澄清事情的另一個問題。如果您執行「添加」(啓用「應用」),然後執行「刪除」,是否禁用「應用」按鈕? –

+1

作爲旁註:用SelectionAdapter替換MouseListener。 – pimpf0r

+0

添加和刪除後,應用按鈕保持啓用狀態。是的,我會取代它,謝謝 –

回答

2

我不知道單從這些信息您的問題,但只是幾件事情要檢查:

  1. 你有沒有證實setDirty(true)被稱爲(例如,使用的println或斷點?)
  2. 有你把手錶放在org.eclipse.debug.ui.AbstractLaunchConfigurationTab.fDirty看看它是否改回來了?
  3. 你重寫isDirty
  4. 從表中移除一個項目使得啓動配置以某種方式變得無效,即不能Apply時無效值都在推出配置。例如,爲了可保存,canSave必須返回true作爲啓動配置一部分的所有選項卡。

這是代替(S),用於設置應用按鈕的啓用狀態(的一個):

org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.updateButtons()

/** 
* updates the button states 
*/ 
private void updateButtons() { 
    boolean dirty = isDirty() && canSave(); 
    fApplyButton.setEnabled(dirty); 
    fRevertButton.setEnabled(dirty); 
} 
  • 考慮如果一個鼠標聽衆是你想要的。請注意,您正在響應MouseDown,如果某個用戶選中了該控件並按Enter/Space鍵,則可能無法達到您所期望的效果。更典型的做法是按鈕爲addSelectionListener。 (難道甚至是響應事件,在這個不尋常的時間導致的嗎?)
  • +0

    是的,看看update()方法,使用setDirty(真)肯定被稱爲 2.好主意,我會檢查它在幾個小時內,在這裏報告,感謝 3.無 4.我不這麼認爲。你能否澄清什麼可能是無效的啓動配置? –

    +1

    已更新4以獲取更多信息。 BTW至於1我可以看到update()調用setDirty(),但我不能告訴的是,如果您確實確保當您向下執行鼠標時,實際上正在調用該方法,並且沒有其他事情出錯了(隱藏在引用中的異常,例如)。對不起,如果我對於1是非常基本的,如果你已經證實了這一點,沒有冒犯,我只想要最好的答案。 –

    +1

    添加了第5個選項,儘管我建議您不管:-) –