Eclipse WindowBuilder(SWT)插件安裝及初次使用記錄(萌新)

来源:https://www.cnblogs.com/fordsonliuzhiwen/archive/2022/05/16/16275358.html
-Advertisement-
Play Games

Eclipse WindowBuilder(SWT)插件安裝及初次使用(萌新) 一、插件安裝 (有VPN的掛VPN,伺服器在外網更新下載比較慢) 1.首先更新到最新版本 點擊Help,點擊check for update,右下角顯示查詢進度,查詢完畢會顯示最新版內容。全部更新 2.還是在help內, ...


Eclipse WindowBuilder(SWT)插件安裝及初次使用(萌新)

一、插件安裝

(有VPN的掛VPN,伺服器在外網更新下載比較慢)

1.首先更新到最新版本

點擊Help,點擊check for update,右下角顯示查詢進度,查詢完畢會顯示最新版內容。全部更新

 

2.還是在help內,點擊eclipse marketplacea,搜索windowbuilder插件,安裝。這個是圖形化界面編程,內置swtswing。我們用swt

二、創建project

  1. project explorer新建“other project”,快捷鍵ctrl+N,找到SWT/JFace java Project

 

    點開,右鍵src,新建other

 

   依次點擊WindowsBuilder—SWT Designer—SWT—Application Window

   空Project:

 

 

 

底部Source是源碼,Design是圖形化編程。Design里拖動組件,在源碼中會同時顯現代碼。一般來說,在design中拖動組件(如按鈕、文本框)等,然後添加監聽(如點擊等),運行的功能在source中給出代碼

 

 

 

(更多用處還不清楚,今天第一天下載)

 

這邊建議可以先看狂神的gui編程:

https://www.bilibili.com/video/BV1DJ411B75F?spm_id_from=333.337.search-card.all.click

雖然主要講的是awtswing但很多原理是共通的

 

二、自己摸索寫了個gui計算a+b

 

 

 

很簡單,三個label三個文本框,一個按鈕。全都是可以拖動的

背景圖片我沒有找到在design中直接添加的辦法,用代碼添加。(隨便挑了個圖過來)

這個shell就是視窗數值代碼

 

2.按鈕監聽

 

右鍵按鈕組件,按上圖添加監聽。我隨便選了個雙擊。

選完之後,返回source查看源代碼,會發現多出一些代碼:

中間就是要寫當你雙擊時執行的代碼

我寫的是雙擊後執行A+B,同時不允許輸入空格。

由於文本框輸入都是String所以計算時多次強制轉換。我認為應該還有更好的方式完成a+b這個簡單的操作。哎

3.初次之外,還寫了個文本框監聽,讓你無法輸入英文和符號

下圖為第一個文本框的監聽,第二個相同,改一下文本框名字就行

 

4.自動換行

數字一長就會超出文本框顯示,所以加了個自動換行的style

 

 

 

最終效果:

 

總結流程:design設計界面,並添加監聽,執行代碼得自己去source里寫。

 

 

 

四、小結

有點gui基礎會很輕鬆,不過後面老師應該也會交所以不急

網上關於swt下載安裝教程太少了,(不過swt內實現一些功能的操作教學還是有不少的,可以ctrlcv了)文字版很多有問題。視頻幾乎沒有。本文主要寫一下下載方式和我第一天玩玩的基礎操作。東西特別多,得慢慢學。

 

代碼:

  1 package testSWT;
  2 
  3 import org.eclipse.swt.widgets.Display;
  4 import org.eclipse.swt.widgets.Shell;
  5 import org.eclipse.swt.widgets.Label;
  6 import org.eclipse.jface.window.Window;
  7 import org.eclipse.swt.SWT;
  8 import org.eclipse.swt.widgets.Text;
  9 import org.eclipse.swt.layout.GridLayout;
 10 import org.eclipse.swt.custom.StackLayout;
 11 import org.eclipse.swt.layout.FormLayout;
 12 import org.eclipse.ui.forms.widgets.FormToolkit;
 13 import org.eclipse.swt.widgets.Button;
 14 import org.eclipse.swt.events.MouseAdapter;
 15 import org.eclipse.swt.events.MouseEvent;
 16 import org.eclipse.swt.widgets.Composite;
 17 import org.eclipse.wb.swt.SWTResourceManager;
 18 import org.eclipse.ui.forms.widgets.ImageHyperlink;
 19 import org.eclipse.swt.widgets.Menu;
 20 import org.eclipse.swt.widgets.MenuItem;
 21 import org.eclipse.swt.events.MouseWheelListener;
 22 import org.eclipse.swt.events.SelectionAdapter;
 23 import org.eclipse.swt.events.SelectionEvent;
 24 import org.eclipse.swt.events.VerifyListener;
 25 import org.eclipse.swt.events.VerifyEvent;
 26 
 27 public class testSWTAPP {
 28 
 29     protected Shell shell;
 30     private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
 31     private Text txtNewText;
 32     private Text txtNewText_1;
 33     private Text txtNewText_2;
 34 
 35     /**
 36      * Launch the application.
 37      * @param args
 38      */
 39     public static void main(String[] args) {
 40         try {
 41             testSWTAPP window = new testSWTAPP();
 42             window.open();
 43         } catch (Exception e) {
 44             e.printStackTrace();
 45         }
 46     }
 47 
 48     /**
 49      * Open the window.
 50      */
 51     public void open() {
 52         Display display = Display.getDefault();
 53         createContents();
 54         shell.open();
 55         shell.layout();
 56         while (!shell.isDisposed()) {
 57             if (!display.readAndDispatch()) {
 58                 display.sleep();
 59             }
 60         }
 61     }
 62 
 63     /**
 64      * Create contents of the window.
 65      */
 66     protected void createContents() {
 67         shell = new Shell(SWT.CLOSE|SWT.MIN);
 68         shell.setImage(SWTResourceManager.getImage("C:\\Users\\wenwen\\Desktop\\CXTKZ026UV(LIF7]]YFG)CW.png"));
 69         shell.setSize(466, 539);
 70         shell.setText("Testing SWT...");
 71         shell.setLayout(null);
 72         shell.setBackgroundImage(SWTResourceManager.getImage("C:\\Users\\wenwen\\Desktop\\CXTKZ026UV(LIF7]]YFG)CW.png"));
 73         
 74         Button button = formToolkit.createButton(shell, "\uFF08\u53CC\u51FB\uFF09\u6C42\u548C", SWT.NONE);
 75         
 76         
 77         button.setForeground(SWTResourceManager.getColor(SWT.COLOR_LINK_FOREGROUND));
 78         button.addMouseListener(new MouseAdapter() {
 79             @Override
 80             public void mouseDoubleClick(MouseEvent e) {
 81                 int flag = 0;
 82                 String A =  txtNewText.getText();
 83                 if(A.contains(" "))flag=1;
 84                 String B=  txtNewText_1.getText();
 85                 if(B.contains(" "))flag=1;
 86                 
 87                 if(flag==1) {
 88                     txtNewText_2.setText("error,別tm輸入空格啊小崽子");
 89                 }
 90                 else {
 91                 double a =Double.parseDouble(txtNewText.getText());
 92                 double b =Double.parseDouble(txtNewText_1.getText());
 93                 double c=a+b;String C=Double.toString(c);
 94                 txtNewText_2.setText(C);
 95                 }
 96             }
 97         });
 98         
 99         button.setBounds(147, 372, 167, 34);
100         
101         txtNewText = formToolkit.createText(shell,"", SWT.WRAP | SWT.MULTI);
102         txtNewText.addVerifyListener(new VerifyListener() {
103             public void verifyText(VerifyEvent e) {
104                 
105                  try {
106                         // 以Text中已經輸入的內容創建StringBuffer對象
107                         StringBuffer buffer = new StringBuffer(txtNewText.getText());
108                         // 刪除e.start, e.end指定範圍的內容
109                         // 並將要插入的內容e.text插入指定的位置,模擬輸入e.text後Text對象中的內容
110                         // 末尾添一個0,以保證buffer中只有一個字元為且為+-.時,不會觸發NumberFormatException 
111                         buffer.delete(e.start, e.end).insert(e.start, e.text).append('0');
112                         // 嘗試將buffer中的內容轉換成Float,如果不拋出異常說明輸入內容有效
113                         Double.valueOf(buffer.toString());
114                     } catch (NumberFormatException ex) {
115                         e.doit=false;
116                     }
117             }
118         });
119         txtNewText.setBounds(259, 90, 151, 30);
120         
121             
122         
123             
124         
125         
126         txtNewText_1 = formToolkit.createText(shell, "", SWT.WRAP | SWT.MULTI);
127         txtNewText_1.addVerifyListener(new VerifyListener() {
128             public void verifyText(VerifyEvent e) {
129                 
130                  try {
131                         // 以Text中已經輸入的內容創建StringBuffer對象
132                         StringBuffer buffer = new StringBuffer(txtNewText_1.getText());
133                         // 刪除e.start, e.end指定範圍的內容
134                         // 並將要插入的內容e.text插入指定的位置,模擬輸入e.text後Text對象中的內容
135                         // 末尾添一個0,以保證buffer中只有一個字元為且為+-.時,不會觸發NumberFormatException 
136                         buffer.delete(e.start, e.end).insert(e.start, e.text).append('0');
137                         // 嘗試將buffer中的內容轉換成Float,如果不拋出異常說明輸入內容有效
138                         Double.valueOf(buffer.toString());
139                     } catch (NumberFormatException ex) {
140                         e.doit=false;
141                     }
142             }
143         });
144         txtNewText_1.setBounds(259, 189, 151, 30);
145         
146         
147         txtNewText_2 = formToolkit.createText(shell, "", SWT.WRAP | SWT.MULTI);
148         txtNewText_2.setText("");
149         txtNewText_2.setBounds(259, 254, 151, 83);
150         
151         Label lblA = formToolkit.createLabel(shell, "a:", SWT.CENTER);
152         lblA.setBackground(SWTResourceManager.getColor(SWT.COLOR_YELLOW));
153         lblA.setBounds(107, 93, 90, 24);
154         
155         Label lblB = formToolkit.createLabel(shell, "b:", SWT.CENTER);
156         lblB.setBackground(SWTResourceManager.getColor(SWT.COLOR_YELLOW));
157         lblB.setBounds(107, 192, 90, 24);
158         
159         Label lblA_1_1 = formToolkit.createLabel(shell, "a+b:", SWT.CENTER);
160         lblA_1_1.setBackground(SWTResourceManager.getColor(SWT.COLOR_YELLOW));
161         lblA_1_1.setBounds(107, 290, 90, 24);
162 
163     }
164 }
View Code

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 高可用性(英語:high availability,縮寫為 HA) IT術語,指系統無中斷地執行其功能的能力,代表系統的可用性程度。是進行系統設計時的準則之一。 高可用性系統意味著系統服務可以更長時間運行,通常通過提高系統的容錯能力來實現。高可用性或者高可靠度的系統不會希望有單點故障造成整體故障的情 ...
  • 1.將軟體包kafka_2.12-3.0.0.tgz上傳到/opt/software/目錄下,解壓到/opt/module/目錄下 tar -zxvf kafka_2.12-3.0.0.tgz -C /opt/module/ 2.修改解壓後的文件名稱 mv kafka_2.12-3.0.0/ kaf ...
  • 1.拷貝 apache-zookeeper-3.5.7-bin.tar.gz到/opt/software目錄下 2.解壓到指定目錄 tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/module/ 3.修改名稱 cd /opt/module mv ...
  • 華為分析服務面向開發者提供兩種數據展現方式:(1)事件數據下載,開發者可以將事件數據下載後導入到自有的分析系統中;(2)直接在AGC概覽頁面查看用戶數和事件數。 問題描述 某開發者想將事件數據導入到自有系統中,他在導出數據時將標識用戶方式選擇“按UserID和設備”,最後發現導出數據中的事件數比分析 ...
  • 不通過路由的情況下, 懶載入一個angular模塊, 並動態創建其中聲明的組件 ...
  • 忙裡偷閑,還在學校,趁機把後面的路由多出來的知識點學完 十.緩存路由組件 讓不展示的路由組件保持掛載,不被銷毀 在我們的前面案例有一個問題,都知道vue的路由當我們切換一個路由後,另一個路由就會被銷毀,如果我在一個路由寫了有一些input框 當我切換到另一個組件message很明顯這個時候news里 ...
  • Vue-mini 完整的Demo示例:[email protected]:xsk-walter/Vue-mini.git 一、Vue實例 構造函數: $option\ $el\ $data 判斷是否存在 通過 || 邏輯運算符; _ProxyData 遍歷所有data屬性,並註入到vue實例中; 判斷是否 ...
  • 數組對象 創建數組 創建方式1: var arrname = [元素0,元素1,….]; // var arr=[1,2,3]; 創建方式2: var arrname = new Array(元素0,元素1,….); // var test=new Array(100,"a",true); 數組方法 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...