77import java .net .URI ;
88import java .net .URISyntaxException ;
99import java .util .Locale ;
10+ import java .util .MissingResourceException ;
1011import java .util .ResourceBundle ;
11- import java .util .concurrent .ExecutionException ;
12+
13+ import org .kohsuke .github .GitHub ;
14+ import org .kohsuke .github .GitHubBuilder ;
15+ import org .kohsuke .github .GHRelease ;
16+ import org .kohsuke .github .GHRepository ;
1217
1318/**
1419 * 负责构建和管理所有用户界面元素(菜单、按钮、对话框)
@@ -24,13 +29,27 @@ public class GobangGameUI {
2429 private JButton undoBtn , restartBtn , closeBtn , loadBtn , saveBtn ;
2530 private JMenuItem openItem , saveItem , closeItem , undoItem , restartItem , settingItem , aboutItem ;
2631 private JMenu fileMenu , gameMenu , toolsMenu , aboutMenu ;
27- private JLabel aiState ;
32+ private JLabel aiState , version ;
2833
2934 public GobangGameUI (GobangGame game , Locale initialLocale ) {
3035 this .game = game ;
3136 setLanguage (initialLocale );
3237 }
3338
39+ public double GetLatestVer () {
40+ GHRelease release ;
41+ try {
42+ GitHub github = new GitHubBuilder ().withOAuthToken ("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" ).build ();
43+ GHRepository repo = github .getRepository ("QIU2014/GobangGame" );
44+ release = repo .getLatestRelease ();
45+ double latestVer = Double .parseDouble (String .format ("%s" , release .getTagName ()).replace ("GobangGame_v" , "" ));
46+ return latestVer ;
47+ } catch (IOException e ) {
48+ e .printStackTrace ();
49+ return 0.0 ;
50+ }
51+ }
52+
3453 public ResourceBundle getMessages () {
3554 return messages ;
3655 }
@@ -90,19 +109,32 @@ public JPanel createButtonPanel() {
90109 // 回到原来的FlowLayout,但减少垂直间距
91110 buttonPanel .setLayout (new FlowLayout (FlowLayout .CENTER , 0 , 30 ));
92111 buttonPanel .setPreferredSize (new Dimension (game .getBUTTON_WIDTH (), game .getHeight ()));
93- try {
94- this .saveBtn = new JButton (messages .getString ("button.save" ));
95- this .loadBtn = new JButton (messages .getString ("button.load" ));
96- } catch (Exception e ) {
97- System .out .println (e .getMessage ());
98- System .out .println ("Falling back to hard-coded text" );
99- this .saveBtn = new JButton ("Save" );
100- this .loadBtn = new JButton ("Open" );
101- }
112+ this .saveBtn = new JButton (messages .getString ("button.save" ));
113+ this .loadBtn = new JButton (messages .getString ("button.load" ));
102114 this .undoBtn = new JButton (messages .getString ("button.undo" ));
103115 this .restartBtn = new JButton (messages .getString ("button.restart" ));
104116 this .closeBtn = new JButton (messages .getString ("button.exit" ));
117+
105118 this .aiState = new JLabel ("AI: IDLE" , SwingConstants .CENTER );
119+ try {
120+ if (GetLatestVer () > GobangGame .VERSION ) {
121+ this .version = new JLabel (messages .getString ("version.update" ) + "v" + GetLatestVer (), SwingConstants .CENTER );
122+ version .setForeground (Color .RED );
123+ } else {
124+ this .version = new JLabel ("Version" + GobangGame .VERSION , SwingConstants .CENTER );
125+ version .setForeground (Color .GREEN );
126+ }
127+ } catch (MissingResourceException e ) {
128+ e .printStackTrace ();
129+ System .out .println ("Missing resource! Falling back to hard-coded" );
130+ if (GetLatestVer () > GobangGame .VERSION ) {
131+ this .version = new JLabel ("Update detected: " + "v" + GetLatestVer (), SwingConstants .CENTER );
132+ version .setForeground (Color .RED );
133+ } else {
134+ this .version = new JLabel ("GobangGame v" + GobangGame .VERSION , SwingConstants .CENTER );
135+ version .setForeground (Color .GREEN );
136+ }
137+ }
106138
107139 Dimension btnSize = new Dimension (game .getBUTTON_WIDTH (), game .getBUTTON_HEIGHT ());
108140
@@ -120,6 +152,7 @@ public JPanel createButtonPanel() {
120152 restartBtn .setFont (font );
121153 closeBtn .setFont (font );
122154 aiState .setFont (font );
155+ version .setFont (font );
123156
124157 // 设置AI标签样式
125158 aiState .setForeground (Color .BLUE );
@@ -146,6 +179,12 @@ public JPanel createButtonPanel() {
146179 // 添加AI标签
147180 buttonPanel .add (aiState );
148181
182+ JSeparator separator_1 = new JSeparator (SwingConstants .HORIZONTAL );
183+ separator_1 .setPreferredSize (new Dimension (game .getBUTTON_WIDTH () - 20 , 2 ));
184+ buttonPanel .add (separator_1 );
185+
186+ buttonPanel .add (version );
187+
149188 return buttonPanel ;
150189 }
151190
0 commit comments