創建項目 可以用maven
idea設置
into 那個
參考資料
Java 基礎
https://www.liaoxuefeng.com/wiki/1252599548343744/1260454548196032
Intellij Idea開發: 手把手教你Java GUI開發,並且打包成可執行Jar程序
https://blog.csdn.net/mawei7510/article/details/89638126
Intellij Idea開發: 手把手教你將Jar包打包成可執行的exe,可以在無jre環境下運行
https://blog.csdn.net/mawei7510/article/details/89675034
Java Swing 介紹
https://www.runoob.com/w3cnote/java-swing-demo-intro.html
Java Swing 比較詳細的組件介紹
http://c.biancheng.net/view/1206.html
嶄新開始
maven 創建 swing
GroupId && ArtifactId && Version 的含義
groupId 和 artifactId 都是Id的含義,為了表明你在全球的唯一性
groupId 是 A.B.C 的結構
A 是 域的概念 一般為 org、com、cn等等許多,其中org為非營利組織,com為商業組織,個人的話就可以來個cn
B 一般是 公司名稱,要是個人的話,可以來個人的名稱
C 一般是項目名稱, 你當前項目叫什么名稱
artifactId 一般是 groupId 的C,也就是這個項目叫什么名字。定義了當前maven項目在組中唯一的ID。
也就是說 artifactId 就是 maven專用的id名稱。groupId 是 全世界上你的唯一標志名稱。
Version 是版本的意思 例:1.0-SNAPSHOT 。其中1.0是版本號,SNAPSHOT版本代表不穩定、尚處於開發中的版本。而衍生的有Release版本則代表穩定的版本
maven創建項目完成
maven創建的項目 應該可以從右側 maven的工具面板 快速打包
用 Artifacts的方法可以打包成功,記得src 后面的都刪掉,要不不能成功。
maven的package 打包jar
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<!-- 生成的jar中,不要包含pom.xml和pom.properties這兩個文件-->
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<!-- 是否要把第三方jar放到manifest的classpath中-->
<addClasspath>true</addClasspath>
<!-- 生成的manifest中classpath的前綴,因為要把第三方jar放到lib目錄下,所以classpath的前綴是lib/-->
<classpathPrefix>lib/</classpathPrefix>
<!-- 應用的main class-->
<mainClass>cn.reciter.maven_swing_boot.HelloWorldSwing</mainClass>
</manifest>
</archive>
<!-- 過濾掉不希望包含在jar中的文件-->
<excludes>
<exclude>${project.basedir}/xml/*</exclude>
</excludes>
</configuration>
</plugin>
這個配置 貼到 pom.xml, 正常貼到 build-plugins下面,這個maven生成,自動添加了 pluginManagement,所以就添加到它相應的下面
還有一個坑就是,<artifactId>maven-jar-plugin</artifactId>
這個自動生成的有,記得注釋了。
frame.setSize(300, 300); 不起作用
frame.pack();
這句話 會自動計算寬高,導致 setSize不起作用
窗口居中顯示
int w = (int)java.awt.Toolkit.getDefaultToolkit().getScreenSize().width;
int h = (int)java.awt.Toolkit.getDefaultToolkit().getScreenSize().height;
System.out.println("w: "+w + " h: "+ h);
int width = 400;
int height = 200;
int x = w/2 - width/2;
int y = h/2 - height/2;
frame.setBounds(x,y,width,height); //設置窗口大小和位置
6種javaSwing布局
- 邊框布局管理器:上右下左中 模式
- 流式布局管理器:float模式
- 卡片布局管理器:cl.show(cards,"card1") 面板切換模式
- 網格布局管理器:Row Col 表格模式
- 網格包布局管理器:復雜表格模式
- 盒布局管理器:x, y定位模式 不過是單獨的x 和 單獨的y 兩個函數createHorizontalBox() createVerticalBox()
http://c.biancheng.net/view/1212.html
植物大戰僵屍swing版
https://blog.csdn.net/dkm123456/article/details/117047116
https://blog.csdn.net/hollis_chuang/article/details/105630493
https://github.com/llx330441824/plant_vs_zombie_simple.git
通過這個案例可以更細致的看 swing
匿名內部類
https://www.cnblogs.com/dongyl/p/7661696.html
使用匿名內部類:必須繼承一個父類或實現一個接口
實現implements 和 擴展extends 繼承inherit的區別
因為看了一個 子類 實現了父類 然后 直接 new了父類
extends 繼承一個父類的關鍵字
implements是一個類實現一個接口用的 關鍵字 ,他是用來實現接口中定義的抽象方法。
比如:people是一個接口,他里面有say這個方法。
public interface people(){ public say();}
但是接口沒有方法體。只能通過一個具體的類去實現其中的方法體。
比如chinese這個類,就實現了people這個接口。
public class chinese implements people{ public say() {System.out.println("你好!");}}
extends, 可以實現父類,也可以調用父類初始化 this.parent()。而且會覆蓋父類定義的變量或者函數。這樣的好處是:架構師定義好接口,讓工程師實現就可以了。整個項目開發效率和開發成本大大降低。
implements,實現父類,子類不可以覆蓋父類的方法或者變量。即使子類定義與父類相同的變量或者函數,也會被父類取代掉。
這兩種實現的具體使用,是要看項目的實際情況,需要實現,不可以修改implements,只定義接口需要具體實現,或者可以被修改擴展性好,用extends。
記得張老師的視頻中這樣講到:若同時用到 extends 和 implements 的時候,extends 必須放在 implements 關鍵字之前。如 : class A extends B implements C.
class 內部嵌套 class
java Swing游戲開發
老Java程序員花一天時間寫了個飛機大戰,很舒服!
https://blog.csdn.net/dkm123456/article/details/117265359
老Java程序員花2天寫了個連連看,我竟連不過我女兒,我了個去!
https://blog.csdn.net/dkm123456/article/details/117431591
Java swing坦克大戰,我女兒都學會了,你呢?
https://blog.csdn.net/dkm123456/article/details/116609629