Ce que vous pouvez voir en
plus
Il faut être honnête, vous avez vu une bonne partie des
objets graphiques proposés par Java. Il en reste bien d'autres, mais le
fonctionnement de ceux-ci ne devraient pas vous poser trop de problèmes
maintenant que vous êtes initiés à la programmation événementielle...
Je vous propose de faire un tour d'horizon de certains autres objets dont vous pourriez avoir besoin.
Ceux-ci seront accompagnés d'un code facile à comprendre ainsi que d'une brève description !
En avant pour le dernier chapitre de ce tuto Java !
Je vous propose de faire un tour d'horizon de certains autres objets dont vous pourriez avoir besoin.
Ceux-ci seront accompagnés d'un code facile à comprendre ainsi que d'une brève description !
En avant pour le dernier chapitre de ce tuto Java !
Sommaire du chapitre :
- D'autres conteneurs graphiques
- D'autres objets graphiques
- Enjoliver vos IHM
|
D'autres conteneurs graphiques
Voici quelques objets que vous
pourrez trouver sur votre passage.
Le JWindow
Pour faire simple, c'est une JFrame mais sans les contours de fenêtre permettant de réduire, fermer ou agrandir ! Souvent utiliser pour faire des splash screen : la même chose que vous avez au lancement d'Eclipse...
Le JWindow
Pour faire simple, c'est une JFrame mais sans les contours de fenêtre permettant de réduire, fermer ou agrandir ! Souvent utiliser pour faire des splash screen : la même chose que vous avez au lancement d'Eclipse...
Code source :
import
java.awt.Color;
import
javax.swing.BorderFactory;
import
javax.swing.ImageIcon;
import
javax.swing.JLabel;
import
javax.swing.JPanel;
import
javax.swing.JWindow;
import
javax.swing.border.BevelBorder;
public
class Window extends JWindow{
public static void main(String[]
args){
Window wind = new
Window();
wind.setVisible(true);
}
public Window(){
setSize(220,
165);
setLocationRelativeTo(null);
JPanel pan = new
JPanel();
JLabel img = new
JLabel(new ImageIcon("planète.jpeg"));
img.setVerticalAlignment(JLabel.CENTER);
img.setHorizontalAlignment(JLabel.CENTER);
pan.setBorder(BorderFactory.createLineBorder(Color.blue));
pan.add(img);
getContentPane().add(pan);
}
}
Le JDesktopPane combiné à des JInternalFrame
Ces deux objets sont très souvent associés et permettent de faire des applications multi-fenêtres !
Code source :
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import
javax.swing.JInternalFrame;
public
class Bureau extends JFrame{
private static int nbreFenetre =
0;
private JDesktopPane desktop =
new JDesktopPane();
private static int xy = 10;
public Bureau(){
this.setSize(400,
300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton
ajouter = new JButton("Ajouter une fenêtre interne");
ajouter.addActionListener(new
ActionListener(){
public
void actionPerformed(ActionEvent event){
++nbreFenetre;
xy
+= 2;
desktop.add(new
MiniFenetre(nbreFenetre), nbreFenetre);
}
});
this.getContentPane().add(desktop,
BorderLayout.CENTER);
this.getContentPane().add(ajouter,
BorderLayout.SOUTH);
}
class MiniFenetre extends
JInternalFrame{
public
MiniFenetre(int nbre){
this.setTitle("Fenetre
N°"+nbre);
this.setClosable(true);
this.setResizable(true);
this.setSize(150,
80);
this.setLocation(xy,
xy);
this.setVisible(true);
}
}
public static void main(String[]
args){
Bureau
bureau = new Bureau();
bureau.setVisible(true);
}
}
D'autres objets graphiques
Voici un objet sympa mais
quelque peu limité par la façon dont il gère son contenu HTML !
Le JEditorPane
Il permet de réaliser des textes riches avec mise en page.
Il y a aussi le JTextPane qui vous permet de faire un mini-éditeur de texte très facilement (enfin, tout est relatif...).
Le JEditorPane
Il permet de réaliser des textes riches avec mise en page.
Il y a aussi le JTextPane qui vous permet de faire un mini-éditeur de texte très facilement (enfin, tout est relatif...).
Code source de cette fenêtre :
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import
javax.swing.text.html.HTMLEditorKit;
public
class Fenetre extends JFrame {
private JEditorPane editorPane,
apercu;
private JTabbedPane onglet = new
JTabbedPane();
public Fenetre(){
this.setSize(600,
400);
this.setTitle("Conteneur
éditable");
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
editorPane = new
JEditorPane();
editorPane.setText("<HTML>\n<HEAD></HEAD>\n<BODY>\n\n</BODY>\n</HTML>");
apercu = new
JEditorPane();
apercu.setEditable(false);
onglet.addTab("Editeur
HTML", new JScrollPane(editorPane));
onglet.addTab("Aperçu",
new JScrollPane(apercu));
onglet.addChangeListener(new
ChangeListener(){
public
void stateChanged(ChangeEvent e) {
FileWriter
fw = null;
try
{
fw
= new FileWriter(new File("tmp/tmp.html"));
fw.write(editorPane.getText());
fw.close();
}
catch (FileNotFoundException e1) {
//
TODO Auto-generated catch block
e1.printStackTrace();
}
catch (IOException e1) {
//
TODO Auto-generated catch block
e1.printStackTrace();
}
//*
try
{
File
file = new File("tmp/tmp.html");
apercu.setEditorKit(new
HTMLEditorKit());
apercu.setPage(file.toURL());
}
catch (IOException e1) {
//
TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
this.getContentPane().add(onglet,
BorderLayout.CENTER);
this.setVisible(true);
}
public static void main(String[]
args){
Fenetre
fen = new Fenetre();
}
}
Le JSlider
Celui-ci est un outil qui vous permet d'utiliser un système de mesure pour une application : re-dimensionner une image, choisir le tempo d'un morceau de musique, l'opacité d'une couleur...
Code source :
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public
class Slide extends JFrame{
private JLabel label =
new JLabel("Valeur actuelle : 30");
public Slide(){
this.setSize(250,
150);
this.setTitle("Slider");
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JSlider slide =
new JSlider();
slide.setMaximum(100);
slide.setMinimum(0);
slide.setValue(30);
slide.setPaintTicks(true);
slide.setPaintLabels(true);
slide.setMinorTickSpacing(10);
slide.setMajorTickSpacing(20);
slide.addChangeListener(new
ChangeListener(){
public
void stateChanged(ChangeEvent event){
label.setText("Valeur
actuelle : " + ((JSlider)event.getSource()).getValue());
}
});
this.getContentPane().add(slide,
BorderLayout.CENTER);
this.getContentPane().add(label,
BorderLayout.SOUTH);
}
public static void main(String[]
args){
Slide slide = new
Slide();
slide.setVisible(true);
}
}
La JProgessBar
Elle vous permet de réaliser une barre de progression pour des traitements longs.
Code source :
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import
javax.swing.JFrame;
import
javax.swing.JProgressBar;
public
class Progress extends JFrame{
private Thread t;
private JProgressBar bar;
private JButton launch ;
public Progress(){
this.setSize(300,
80);
this.setTitle("***
JProgressBar ***");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
t = new
Thread(new Traitement());
bar = new JProgressBar();
bar.setMaximum(500);
bar
.setMinimum(0);
bar.setStringPainted(true);
this.getContentPane().add(bar,
BorderLayout.CENTER);
launch = new
JButton("Lancer");
launch.addActionListener(new
ActionListener(){
public
void actionPerformed(ActionEvent event){
t
= new Thread(new Traitement());
t.start();
}
});
this.getContentPane().add(launch,
BorderLayout.SOUTH);
t.start();
this.setVisible(true);
}
class Traitement implements
Runnable{
public void
run(){
launch.setEnabled(false);
for(int
val = 0; val <= 500; val++){
bar.setValue(val);
try
{
t.sleep(10);
}
catch (InterruptedException e) {
//
TODO Auto-generated catch block
e.printStackTrace();
}
}
launch.setEnabled(true);
}
}
public static void main(String[]
args){
Progress p
= new Progress();
}
}
La
modification des valeurs de cet objet doit se faire dans un thread, sinon vous
aurez la barre vide, un temps d'attente puis la barre remplie, mais sans
défilement des valeurs !
Enjoliver vos IHM
Nous n'avons pas beaucoup
abordé ce point tout au long du tuto, mais je vous laisse découvrir les
joyeusetés qu'offre Java en la matière... C'est encore en cherchant les infos
dont on a besoin qu'on les retient le mieux !
Voici comment ajouter des bordures à vos composants :
Voici comment ajouter des bordures à vos composants :
Code source :
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import
javax.swing.border.EtchedBorder;
public
class BorderDemo extends JFrame{
private String[] list = { "Bevel Border",
"Etched
Border",
"Line
Border",
"Matted
Border",
"Raised
Bevel Border",
"Title
Border",
"Compound
Border"
};
private Border[] listBorder = { BorderFactory.createBevelBorder(BevelBorder.LOWERED,
Color.black, Color.red),
BorderFactory.createEtchedBorder(Color.BLUE,
Color.GRAY),
BorderFactory.createLineBorder(Color.green),
BorderFactory.createMatteBorder(5,
2, 5, 2, Color.MAGENTA),
BorderFactory.createRaisedBevelBorder(),
BorderFactory.createTitledBorder("Titre"),
BorderFactory.createCompoundBorder(
BorderFactory.createBevelBorder(BevelBorder.LOWERED,
Color.black, Color.blue),
BorderFactory.createMatteBorder(5,
2, 5, 2, Color.MAGENTA)
)
};
public BorderDemo(){
this.setTitle("Les
bordures font la fête !");
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(550,
200);
JPanel pan = new
JPanel();
for(int i = 0; i
< list.length; i++){
JLabel
lib = new JLabel(list[i]);
lib.setPreferredSize(new
Dimension(150, 50));
lib.setBorder(listBorder[i]);
lib.setAlignmentX(JLabel.CENTER);
lib.setHorizontalAlignment(JLabel.CENTER);
pan.add(lib);
}
this.getContentPane().add(pan);
}
public static void main(String[]
args){
BorderDemo demo =
new BorderDemo();
demo.setVisible(true);
}
}
Cadeau du chef pour ceux pour auront installé la version 1.6 du JDK
Jouer sur l'opacité de vos composants :
Code source :
import java.awt.BorderLayout;
import java.lang.reflect.Method;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import
com.sun.awt.AWTUtilities;
public
class OpacityWindow extends JFrame{
private JSlider slide = new
JSlider();
public OpacityWindow(){
this.setTitle("Transparence
!");
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(300,
150);
slide.setMaximum(100);
slide.setMinimum(0);
slide.setValue(100);
slide.setPaintTicks(true);
slide.setPaintLabels(true);
slide.setMinorTickSpacing(10);
slide.setMajorTickSpacing(20);
slide.addChangeListener(new
Changed(this));
this.getContentPane().add(slide,
BorderLayout.CENTER);
this.setVisible(true);
AWTUtilities.setWindowOpacity(this,
((float) slide.getValue()) / 100.0f);
}
public class Changed implements
ChangeListener{
private JFrame
frame;
public
Changed(JFrame frame){this.frame = frame;}
public void
stateChanged(ChangeEvent event){
AWTUtilities.setWindowOpacity(this.frame,
((float) slide.getValue()) / 100.0f);
}
}
public static void main(String[]
args){
OpacityWindow
ow = new OpacityWindow();
}
}
J'espère que ce dernier chapitre vous a plu !
Vous avez encore du temps pour apprendre tout ça, ne vous découragez pas.
Voilà : la partie événementielle est terminée... Bonne continuation à tous les ZérOs qui sont arrivés jusqu'ici et qui ont réussi à suivre mon tuto !
Vous avez encore du temps pour apprendre tout ça, ne vous découragez pas.
Voilà : la partie événementielle est terminée... Bonne continuation à tous les ZérOs qui sont arrivés jusqu'ici et qui ont réussi à suivre mon tuto !
// //
0
comments
//
0 comments to "LECON 317"
Powered by Blogger.
Post a Comment