我正在使用Java和SWT開發GUI應用程序。
我已經創建了一個帶有畫布的主窗口,其中我加載了一個圖像(以及它轉換爲圖像的PDF頁面)。
我已將PaintListener附加到畫布上,並且當我將鼠標拖放到畫布上時,我可以繪製矩形。
當我釋放鼠標左鍵時,我想要一個對話窗口來「精細設置」矩形區域,所以我做了一個4微調(x,y,寬度和高度)的對話框。
現在我想單擊旋鈕,畫布重新繪製更改後的矩形區域。
我試圖將畫布對象傳遞給對話窗口並附加第二個畫筆偵聽器(所以我有一個來自MainWindow.java的paintlistener和另一個來自Dialog.java),但它沒有用。
問題是我在畫布上繪製了多個矩形,如果我從對話框窗口調用canvas.redraw(),已經在畫布上繪製的矩形「消失」了。
這種情況下的最佳做法是什麼?
我認爲把對話窗口放在「工具欄」中,即將4個旋鈕放在工具欄中(或主窗口中的另一個區域),這樣我只有一個畫筆偵聽器並擺脫對話框,但我更喜歡該對話框導致將矩形拖到畫布上然後移動鼠標以在工具欄上單擊是不切實際的。
在此先感謝,莫羅來自對話框的Java SWT更新畫布
0
A
回答
0
你的主窗口中應該實現,例如定製的監聽器:
public interface PreferencesListener {
public void updatePreference(PreferencesEvent e)
}
然後創建其控制的更新管理器:
public class PreferencesController {
private static PreferencesController instance = new PreferencesController();
private List<PreferencesListener> preferencesListeners;
private PreferencesController() {
preferencesListeners = new ArrayList<PreferencesListener>();
}
public static PreferencesController getInstance() {
return instance;
}
public void addPreferenceListener(PreferencesListener listener) {
preferencesListeners.add(listener);
}
public void notify(int x, int y, int w, int h) {
PreferencesEvent e = new PreferencesEvent(x, y, w, h);
for(final PreferencesListener listener: preferencesListeners) {
listener.updatePreference(e);
}
}
}
在創造主的那一刻窗口將其註冊到控制器中:
PreferencesController.getInstance().addPreferenceListener(this);
當您更改對話框觸發值通知:
PreferencesController.getInstance().notify(x,y,w,h);
然後終於實現從PreferencesListener updatePreference(PreferencesEvent E)。從這個時刻開始,每當值x y w h發生變化時,您的窗口將會被通知。從我的角度來看,這是一個很好的解決方案,因爲您的窗口和對話框甚至不知道彼此存在,並且您可以輕鬆添加對首選項更改有反應的其他組件。
相關問題
- 1. 可重新調整對話框在Java SWT
- 2. SWT表單或對話框
- 3. Java SWT - 畫布上的透明背景?
- 4. 更新對話框
- 5. Java swt畫布運行循環
- 6. Java SWT - 設置畫布背景顏色
- 7. swt:如何更新(重繪)只是畫布的一部分
- 8. 來自其他對話框的Sharepoint模式對話框
- 9. 提示在SWT/JFace的對話框
- 10. 更新Recycleview對話框
- 11. 更新進度對話框
- 12. 更新jQuery UI對話框
- 13. 更新進度對話框
- 14. jQuery對話框 - 來自不同鏈接的相同對話框
- 15. Android:SectionIndex對話框的自定義佈局
- 16. 使用Java 7更新的Java Web Start安全對話框51
- 17. 來自線程的Android對話框
- 18. 畫布未更新
- 19. 自定義進度對話框動畫
- 20. 來自Java SWT的窗口ID
- 21. java swing的自定義對話框
- 22. Java的對話框
- 23. 設計一個像對話框一樣的對話框來自android
- 24. 如何處理SWT殼(和對話框)?
- 25. SWT模態對話框非模態
- 26. 在SWT對話框中嵌入org.eclipse.wst.sse.ui.StructuredTextEditor
- 27. SWT - 繼承父對話框shell?
- 28. 來自sitemapnode的jquery對話框
- 29. 來自oncreate的提醒對話框
- 30. 來自對話框的通知
我對此沒有太多瞭解。我必須擴展PaintListener?在你的例子中,接口PreferencesListener是我的「PaintListenerExtended」?而PreferencesController類是「經理」?我看到我必須創建一個PreferencesEvent類,對嗎? – MauroGiaco78
否。您的MainWindow正在實施/擴展PreferencesListener。之後,它可以註冊自己以偵聽對PreferencesController/PreferencesManager的配置更改。 PaintListener在這個領域是無關緊要的。在您的對話框觸發方法updatePreference中採取行動。在MainWindow中重寫updatePreference()應該執行canvas.redraw()。 PaintListener保持原樣。 – Kuba
對不起,但我找不到關於PreferencesListener的任何文檔。也許我沒有正確理解你的代碼示例中的含義。 – MauroGiaco78