如果想要給Dialog最大最小化按鈕,那麼你可以這樣做,即在New這個Dialog的shell的時候(而不是new這個對話方塊的時候)不使用 其trim style(即SWT.DIALOG_TRIM),而是把它換成SWT.CLOSE|SWT.MIN|SWT.MAX的組合。。 同樣的道理,要想把對話方塊做成非模態的情形,那麼也是在new這個對話方塊的shell的時候,指定 SWT.MODELLESS即可. 5 要想處理CTabFolder中選擇某個CTabItem的事件,因為是單擊(選擇)事件,所以SWT中仍是繼承並實現folder.addSelectionListener() 然後在widgetSelected()函數中,先這樣得到選中的CTabItem:CTabItem selectedItem=(CTabItem)e.item; 這是查API並加上自己的猜測所做出的。
6 讓JFreeChart的映像比較小的方法就是對ChartPanel進行屬性設定:chartPanel.setPreferredSize(new java.awt.Dimension(100,100));
7 在SWT中如果想在視窗關閉之前或者的時候做一些事情,需要重載關閉視窗按鈕的函數。首先注意視窗關閉按鈕不是在dialog或者 application window中,而是在這些的shell中的。具體方法是為shell添加addShellListener()方法,具體代碼見下: shell.addShellListener(new ShellAdapter() { public void shellClosed(final ShellEvent e) { //具體幹活代碼 }
});
8
在SWT中如果要在另一個線程中使用GUI線程的某個組件的話,必須使用這樣的一種方式: Display.getDefault().syncExec(new Runnable() { public void run() { //具體幹活代碼 } }); 因為SWT中負責線程之間的互動是在Display中進行的。一般來說一個應用程式只有一個display對象,如果這個應用程式可以有多個對話方塊, 那麼對話方塊在構造的時候是使用主application window的shell進行構造的,這個時候,對話方塊的display對象是由getParent().getDisplay() 來獲得的,而不是像application window中那樣之間建立一個新的Display.getDefaultDisplay()來獲得,這樣就保證了整個應用程式中只有
一個display。
9 如果想在一個按鈕裡讓SWT的對話方塊結束的話,是需要在這個按鈕的響應函數裡寫出shell.dispose()的,因為SWT的事件迴圈過程就是這樣的一個熟悉結構: while(!shell.isDispose()) { if(!display.readAndDispatch()) { display.sleep(); } } 所以讓shell被dispose掉了才能結束這個迴圈