Résolution #30 Fenetres changelog et a propos
This commit is contained in:
2
AppThinker/app.properties
Normal file
2
AppThinker/app.properties
Normal file
@@ -0,0 +1,2 @@
|
||||
#Sat Dec 19 19:04:03 CET 2020
|
||||
isFirstLaunch=true
|
||||
114
AppThinker/src/AboutWindow.java
Normal file
114
AppThinker/src/AboutWindow.java
Normal file
@@ -0,0 +1,114 @@
|
||||
import javafx.scene.control.TextFormatter;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
|
||||
/**
|
||||
* Fenêtre contenant les informations du logiciel
|
||||
*/
|
||||
public class AboutWindow extends JDialog {
|
||||
|
||||
/**
|
||||
* Constructeur - Crée une fenêtre A propos
|
||||
*/
|
||||
public AboutWindow(){
|
||||
|
||||
//Paramétrage de la fenêtre
|
||||
this.setTitle("About AppThinker");
|
||||
this.setModal(true);
|
||||
this.setSize(new Dimension(800, 375));
|
||||
Image img = null;
|
||||
try { img = ImageIO.read(AppThinker.class.getResource("img/logoAppThinker.png")); } catch (Exception ex) { }
|
||||
this.setIconImage(img);
|
||||
this.setResizable(false);
|
||||
this.setLocationRelativeTo(null);
|
||||
this.setLayout(new BorderLayout());
|
||||
|
||||
JPanel panel = new JPanel(){
|
||||
@Override
|
||||
protected void paintComponent(Graphics g) {
|
||||
super.paintComponent(g);
|
||||
Graphics2D g2 = (Graphics2D) g;
|
||||
RenderingHints rh = new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||
g2.setRenderingHints(rh);
|
||||
Image img = null;
|
||||
try { img = ImageIO.read(AppThinker.class.getResource("img/logoAppThinker.png")); } catch (Exception ex) { }
|
||||
g2.drawImage(img, 0, 20, 300, 300, this);
|
||||
/*Informations du logiciel*/
|
||||
g2.setColor(new Color(63, 169, 245));
|
||||
g2.setFont(new Font("Arial", Font.BOLD, 40));
|
||||
g2.drawString("AppThinker", 305, 45);
|
||||
g2.setFont(new Font("Arial", Font.PLAIN, 20));
|
||||
g2.drawString("Make your ideas come true", 305, 80);
|
||||
g2.setFont(new Font("Arial", Font.PLAIN, 14));
|
||||
g2.drawString("> Version : " + AppThinker.version, 305, 140);
|
||||
g2.drawString("> Editing date : " + AppThinker.dateVersion, 305, 165);
|
||||
g2.drawString("> Developer : " + AppThinker.developer, 305, 190);
|
||||
g2.drawString(">", 305, 215);
|
||||
g2.drawString(">", 305, 240);
|
||||
g2.drawString(">", 305, 265);
|
||||
g2.drawString(">", 305, 290);
|
||||
}
|
||||
};
|
||||
|
||||
panel.setLayout(null);
|
||||
JButton updates = new JButton("Check for updates");
|
||||
updates.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
//Ouverture du lien de téléchargement
|
||||
try {
|
||||
Desktop.getDesktop().browse(new URL("https://insset-my.sharepoint.com/:f:/g/personal/valentin_boulanger_insset_onmicrosoft_com/En4LybbeF2ZMpeSiesh_Af8BX3Fl1aDzTUWyw4dtQzJaag").toURI());
|
||||
} catch (URISyntaxException | IOException ex) { }
|
||||
}
|
||||
});
|
||||
panel.add(updates);
|
||||
updates.setBounds(320, 200, 250, 20);
|
||||
|
||||
JButton changelog = new JButton("View Changelog");
|
||||
changelog.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
ChangelogWindow changelog = new ChangelogWindow();
|
||||
}
|
||||
});
|
||||
panel.add(changelog);
|
||||
changelog.setBounds(320, 225, 250, 20);
|
||||
|
||||
JButton ideas = new JButton("Add your ideas to the software !");
|
||||
ideas.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
//Ouverture du lien de téléchargement
|
||||
try {
|
||||
Desktop.getDesktop().browse(new URL("https://forms.gle/WG32HT947MKqdzhbA").toURI());
|
||||
} catch (URISyntaxException | IOException ex) { }
|
||||
}
|
||||
});
|
||||
panel.add(ideas);
|
||||
ideas.setBounds(320, 250, 250, 20);
|
||||
|
||||
JButton donation = new JButton("Make a donation - Thanks !");
|
||||
donation.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
//Ouverture du lien de téléchargement
|
||||
try {
|
||||
Desktop.getDesktop().browse(new URL("https://www.paypal.com/paypalme/valentinboulanger").toURI());
|
||||
} catch (URISyntaxException | IOException ex) { }
|
||||
}
|
||||
});
|
||||
panel.add(donation);
|
||||
donation.setBounds(320, 275, 250, 20);
|
||||
|
||||
this.getContentPane().add(panel);
|
||||
|
||||
this.setVisible(true);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,9 @@
|
||||
import javax.swing.*;
|
||||
import javax.swing.filechooser.FileNameExtensionFilter;
|
||||
import java.io.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* La classe principale du logiciel AppThinker.
|
||||
@@ -8,6 +11,13 @@ import java.io.*;
|
||||
*/
|
||||
public class AppThinker {
|
||||
//JavaDoc tags : @param @return @throws @author @version @see @since @serial @deprecated
|
||||
|
||||
public static String version = "1.0.0-dev5";
|
||||
public static String dateVersion = "18/12/2020";
|
||||
public static List<String> changelog;
|
||||
public static String developer = "V. BOULANGER";
|
||||
public static Properties appProperties = new Properties();
|
||||
|
||||
private static AppThinkerWindow _window;
|
||||
|
||||
/**
|
||||
@@ -16,10 +26,24 @@ public class AppThinker {
|
||||
* @throws InterruptedException Interruption du thread lors de la pause du splashscreen.
|
||||
*/
|
||||
public static void main(String[] args) throws InterruptedException {
|
||||
//Création de la liste des modifications de la version actuelle
|
||||
changelog = new ArrayList<String>();
|
||||
changelog.add("Fenêtre A propos et fenêtre de changelog");
|
||||
changelog.add("2ème note de version");
|
||||
|
||||
AppThinkerSplashscreen splash = new AppThinkerSplashscreen();
|
||||
//Récupération des paramètres du logiciel
|
||||
loadConfiguration();
|
||||
Thread.sleep(3000);
|
||||
splash.dispose();
|
||||
|
||||
_window = new AppThinkerWindow();
|
||||
//Si le logiciel s'ouvre pour la 1ère fois, on affiche la fenêtre de changelog
|
||||
if(appProperties.getProperty("isFirstLaunch").equals("true")) {
|
||||
appProperties.setProperty("isFirstLaunch", "false");
|
||||
storeConfiguration();
|
||||
ChangelogWindow changelog = new ChangelogWindow();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -29,4 +53,43 @@ public class AppThinker {
|
||||
public static AppThinkerWindow getWindow(){
|
||||
return _window;
|
||||
}
|
||||
|
||||
public static void loadConfiguration(){
|
||||
InputStream input = null;
|
||||
try {
|
||||
input = new FileInputStream("app.properties");
|
||||
//Chargement des préférences du logiciel
|
||||
appProperties.load(input);
|
||||
} catch (final IOException ex) {
|
||||
ex.printStackTrace();
|
||||
} finally {
|
||||
if (input != null) {
|
||||
try {
|
||||
input.close();
|
||||
} catch (final IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void storeConfiguration(){
|
||||
OutputStream output = null;
|
||||
try {
|
||||
output = new FileOutputStream("app.properties");
|
||||
//Enregistrement des propriétés du logiciel
|
||||
appProperties.store(output, null);
|
||||
|
||||
} catch (final IOException io) {
|
||||
io.printStackTrace();
|
||||
} finally {
|
||||
if (output != null) {
|
||||
try {
|
||||
output.close();
|
||||
} catch (final IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
import javax.swing.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.Desktop;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
|
||||
/**
|
||||
* Affiche une barre de menu en entête de la fenêtre.
|
||||
@@ -101,9 +105,24 @@ public class AppThinkerMenuBar extends JMenuBar {
|
||||
_appSettings.setIcon(new ImageIcon(getClass().getResource("img/x16/settings.png")));
|
||||
_appMenu.add(_appSettings);
|
||||
_appInfo = new JMenuItem("About AppThinker");
|
||||
_appInfo.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
AboutWindow about = new AboutWindow();
|
||||
}
|
||||
});
|
||||
_appInfo.setIcon(new ImageIcon(getClass().getResource("img/x16/info.png")));
|
||||
_appMenu.add(_appInfo);
|
||||
_appChangelog = new JMenuItem("News");
|
||||
_appChangelog = new JMenuItem("Check for updates");
|
||||
_appChangelog.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
//Ouverture du lien de téléchargement
|
||||
try {
|
||||
Desktop.getDesktop().browse(new URL("https://insset-my.sharepoint.com/:f:/g/personal/valentin_boulanger_insset_onmicrosoft_com/En4LybbeF2ZMpeSiesh_Af8BX3Fl1aDzTUWyw4dtQzJaag").toURI());
|
||||
} catch (URISyntaxException | IOException ex) { }
|
||||
}
|
||||
});
|
||||
_appChangelog.setIcon(new ImageIcon(getClass().getResource("img/x16/news.png")));
|
||||
_appMenu.add(_appChangelog);
|
||||
|
||||
|
||||
71
AppThinker/src/ChangelogWindow.java
Normal file
71
AppThinker/src/ChangelogWindow.java
Normal file
@@ -0,0 +1,71 @@
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
|
||||
/**
|
||||
* Fenêtre d'affichage de la version actuelle et des modifications apportées.
|
||||
*/
|
||||
public class ChangelogWindow extends JDialog{
|
||||
|
||||
public ChangelogWindow(){
|
||||
//Paramétrage de la fenêtre
|
||||
this.setTitle("Version " + AppThinker.version);
|
||||
this.setModal(true);
|
||||
this.setSize(new Dimension(800, 375));
|
||||
Image img = null;
|
||||
try { img = ImageIO.read(AppThinker.class.getResource("img/logoAppThinker.png")); } catch (Exception ex) { }
|
||||
this.setIconImage(img);
|
||||
this.setResizable(false);
|
||||
this.setLocationRelativeTo(null);
|
||||
this.setLayout(new BorderLayout());
|
||||
|
||||
JPanel panel = new JPanel(){
|
||||
@Override
|
||||
protected void paintComponent(Graphics g) {
|
||||
super.paintComponent(g);
|
||||
Graphics2D g2 = (Graphics2D) g;
|
||||
RenderingHints rh = new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
|
||||
g2.setRenderingHints(rh);
|
||||
Image img = null;
|
||||
try { img = ImageIO.read(AppThinker.class.getResource("img/logoAppThinker.png")); } catch (Exception ex) { }
|
||||
g2.drawImage(img, 0, 20, 300, 300, this);
|
||||
/*Informations du logiciel*/
|
||||
g2.setColor(new Color(63, 169, 245));
|
||||
g2.setFont(new Font("Arial", Font.BOLD, 40));
|
||||
g2.drawString("Thanks for downloading AppThinker !", 50, 45);
|
||||
g2.setFont(new Font("Arial", Font.PLAIN, 20));
|
||||
g2.drawString("Version " + AppThinker.version, 305, 80);
|
||||
g2.setFont(new Font("Arial", Font.PLAIN, 14));
|
||||
int i = 140;
|
||||
for(String a : AppThinker.changelog){
|
||||
g2.drawString("> " + a, 305, i);
|
||||
i += 25;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
panel.setLayout(null);
|
||||
|
||||
JButton ideas = new JButton("Add your ideas to the software !");
|
||||
ideas.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
//Ouverture du lien de téléchargement
|
||||
try {
|
||||
Desktop.getDesktop().browse(new URL("https://forms.gle/WG32HT947MKqdzhbA").toURI());
|
||||
} catch (URISyntaxException | IOException ex) { }
|
||||
}
|
||||
});
|
||||
panel.add(ideas);
|
||||
ideas.setBounds(305, 90, 250, 20);
|
||||
|
||||
this.getContentPane().add(panel);
|
||||
|
||||
this.setVisible(true);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user