begin process at 2012 05 24 01:07:11
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Swing

 > MENU CIRCULAIRE EN SWING

MENU CIRCULAIRE EN SWING


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Swing Classé sous :menu circulaire, swing, swing menu, menu java Niveau :Débutant Date de création :06/02/2012 Date de mise à jour :07/02/2012 15:08:07 Vu / téléchargé :2 382 / 494

Auteur : Julien39

Ecrire un message privé
Site perso
Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Cette source propose un menu circulaire pour vos applications en Swing.

Ce menu est paramétrable. On peut définir autant d'items que l'on veut. La taille des boules est modifiable ainsi que le rayon entre le centre du panel et les items du menu.

Source

  • package fr.julien.menucirculaire;
  • import java.awt.Color;
  • import java.awt.GradientPaint;
  • import java.awt.Graphics;
  • import java.awt.Graphics2D;
  • import java.awt.Point;
  • import java.util.List;
  • import javax.swing.JPanel;
  • /**
  • * <b>MenuCirculaire est la classe qui permet de définir un menu circulaire</b>
  • * <p>
  • * Cette classe est caractérisée par les informations suivantes :
  • * <ul>
  • * <li>La couleur de fond du menu</li>
  • * <li>Le rayon séparant les bulles</li>
  • * <li>La taille d'une bulle du menu</li>
  • * <li>La liste des items du menu</li>
  • * </ul>
  • * </p>
  • *
  • * @author Julien
  • *
  • */
  • public class MenuCirculaire extends JPanel{
  • private static final long serialVersionUID = 8334369610498563446L;
  • /**
  • * La liste des items du menu
  • */
  • private List<MenuItem> items;
  • /**
  • * La taille d'une bulle du menu
  • */
  • private int taille;
  • /**
  • * Le rayon séparant les bulles
  • */
  • private int rayon;
  • /**
  • * La couleur de fond du menu
  • */
  • private Color couleur;
  • /**
  • * constructeur du menu
  • * @param couleur
  • * La couleur de fond du menu
  • * @param width
  • * La largeur du menu
  • * @param height
  • * La heuteur du menu
  • * @param rayon
  • * Le rayon séparant les bulles
  • * @param taille
  • * La taille d'une bulle du menu
  • * @param items
  • * La liste des items du menu
  • */
  • public MenuCirculaire(Color couleur, int width, int height, int rayon, int taille, List<MenuItem> items) {
  • this.couleur=couleur;
  • this.items = items;
  • this.taille=taille;
  • this.rayon=rayon;
  • setSize(width, height);
  • build();
  • }
  • /**
  • * Cette procédure permet de placer les bulles sur le menu
  • */
  • private void build(){
  • if(items!=null && items.size()>0){
  • setLayout(null);
  • double angle=2*Math.PI/(items.size());
  • int xCentre=getWidth()/2;
  • int yCentre=getHeight()/2;
  • for(int i=0; i<items.size(); i++){
  • Bulle bulle = new Bulle(items.get(i).getNom(), items.get(i).getCouleurNormal(), items.get(i).getCouleurActif(), taille);
  • bulle.setBounds((int)(xCentre-taille/2+rayon*Math.cos(i*angle)), (int)(yCentre-taille/2+rayon*Math.sin(i*angle)), taille+10, taille+10);
  • add(bulle);
  • }
  • }
  • }
  • @Override
  • public void paintComponent(Graphics g){
  • Graphics2D g2d = (Graphics2D) g;
  • GradientPaint gradient = new GradientPaint(new Point(0, 0), couleur, new Point(getWidth(), getHeight()), new Color(255,255,255,200));
  • g2d.setPaint(gradient);
  • g2d.fillRect(0, 0, getWidth(), getHeight());
  • }
  • }
package fr.julien.menucirculaire;

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.util.List;

import javax.swing.JPanel;

/**
 * <b>MenuCirculaire est la classe qui permet de définir un menu circulaire</b>
 * <p>
 * Cette classe est caractérisée par les informations suivantes :
 * <ul>
 * <li>La couleur de fond du menu</li>
 * <li>Le rayon séparant les bulles</li>
 * <li>La taille d'une bulle du menu</li>
 * <li>La liste des items du menu</li>
 * </ul>
 * </p>
 * 
 * @author Julien
 *
 */
public class MenuCirculaire extends JPanel{

	private static final long serialVersionUID = 8334369610498563446L;

	/**
	 * La liste des items du menu
	 */
	private List<MenuItem> items;

	/**
	 * La taille d'une bulle du menu
	 */
	private int taille;

	/**
	 * Le rayon séparant les bulles
	 */
	private int rayon;

	/**
	 * La couleur de fond du menu
	 */
	private Color couleur;

	/**
	 * constructeur du menu
	 * @param couleur
	 * 	La couleur de fond du menu
	 * @param width
	 * 	La largeur du menu
	 * @param height
	 * 	La heuteur du menu
	 * @param rayon
	 * 	Le rayon séparant les bulles
	 * @param taille
	 * 	La taille d'une bulle du menu
	 * @param items
	 * 	La liste des items du menu
	 */
	public MenuCirculaire(Color couleur, int width, int height, int rayon, int taille, List<MenuItem> items) {
		this.couleur=couleur;
		this.items = items;
		this.taille=taille;
		this.rayon=rayon;
		setSize(width, height);
		build();
	}

	/**
	 * Cette procédure permet de placer les bulles sur le menu
	 */
	private void build(){
		if(items!=null && items.size()>0){
			setLayout(null);
			double angle=2*Math.PI/(items.size());
			int xCentre=getWidth()/2;
			int yCentre=getHeight()/2;
			for(int i=0; i<items.size(); i++){
				Bulle bulle = new Bulle(items.get(i).getNom(), items.get(i).getCouleurNormal(), items.get(i).getCouleurActif(), taille);
				bulle.setBounds((int)(xCentre-taille/2+rayon*Math.cos(i*angle)), (int)(yCentre-taille/2+rayon*Math.sin(i*angle)), taille+10, taille+10);
				add(bulle);
			}
		}
	}

	@Override
	public void paintComponent(Graphics g){
		Graphics2D g2d = (Graphics2D) g;
		GradientPaint gradient = new GradientPaint(new Point(0, 0), couleur, new Point(getWidth(), getHeight()), new Color(255,255,255,200));
		g2d.setPaint(gradient);
		g2d.fillRect(0, 0, getWidth(), getHeight());
	}

}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

07 février 2012 15:08:08 :
Modification de la source suite au commentaire de Niidhogg : - Possibilité d'ajouter des listeners sur les items du menu - Rotation d'un angle de -Pi/2 des items du menu - Renommage des classes

 Sources du même auteur

Source avec Zip MÉTHODOLOGIE POUR LES TESTS UNITAIRES
Source avec Zip INTERPRÉTEUR DE PSEUDO CODE
EVALUER UNE EXPRESSION BOOLÉENNE
JCOMBOBOX EN CASCADE
Source avec Zip FENÊTRE BLOQUANTE

 Sources de la même categorie

JCOMBOBOX EN CASCADE par Julien39
Source avec Zip FENÊTRE BLOQUANTE par Julien39
Source avec Zip ENREGISTRER UN COMPOSANT SWING COMME UNE IMAGE par Julien39
Source avec Zip AFFICHER UNE IMAGE EN ARRIÈRE PLAN DANS UN JPANEL par Julien39
Source avec Zip Source avec une capture UN TABLEUR EN SWING par Julien39

 Sources en rapport avec celle ci

Source avec Zip FENÊTRE BLOQUANTE par Julien39
Source avec Zip Source avec une capture UN TABLEUR EN SWING par Julien39
Source avec Zip Source avec une capture VÉRIFIER LE TEXTE D'UN JTEXTFIELD AVEC UNE REGEX par Julien39
Source avec Zip Source avec une capture FILTRE SUR LES COLONNES D'UNE JTABLE par Julien39
Source avec Zip Source avec une capture BANNIÈRE EN SWING : TEXTE DÉFILANT SUR UN JLABEL par Julien39

Commentaires et avis

Commentaire de Niidhogg le 07/02/2012 14:00:23

-Quand je passe la souris sur un item un cadre apparaît.
-Impossible d'ajouter un MouseListener à un item ?
-Ta classe MenuItem porte le nom d'une classe awt, ça peut être embêtant, personnellement pour plus de clarté je lui aurais donné un autre nom ;) -> http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/MenuItem.html

-Il est plus naturel je penses de faire tourner les menus dans le sens direct.
-Pour les menus à nombre d'item pair la disposition est tout à fait naturel, cependant je pense qu'il serrait plus esthétique de bouger les items d'un quart de tour direct pour les menus à nombre d'item impair, le triangle, le pentagone.. pencher sur le côté je trouve pas ça très beau ;)

Libre à toi de tenir compte de mes commentaires ;)
Je noterais après ta réponse !

Commentaire de Julien39 le 07/02/2012 14:49:53 administrateur CS

Bonjour,

Et merci pour ton commentaire. Je te répond point par point.

1. Le cadre

Pour le cadre qui apparait lors du passage de la souris au dessus des boutons, c'est un bug associé à la transparence : en gros ton objet est soit opaque et dans ce cas, le fond n'est pas redessiné soit ne l'est pas et dans ce cas, le fond est redessiné. Lorsque tu utilises la transparence, ton objet est opaque et transparent : problème le fond n'est pas redessiné.

Donc, pour l'apparition du cadre, c'est une limite technique. Si tu ne veux pas que le cadre apparaisse, il faut supprimer le gradient en background.


2. MenuItem

Oui, c'est vrai, au départ, j'utilisais la classe de awt mais ce n'était pas très pratique justement à cause des listeners, je vais arranger ca.


3. Le sens d'affichage

100% d'accord


Je fais une mise à jour dans quelques instants...

Commentaire de Julien39 le 07/02/2012 15:09:36 administrateur CS

Voilà, c'est fait, j'ai corrigé une partie de ce que tu as cité.

Merci

Commentaire de maimounmahdi le 07/02/2012 18:12:24

Bien fait

Commentaire de Niidhogg le 07/02/2012 20:03:12 7/10

C'est déjà bien mieux je pense ;)
Je suis plutôt du genre a noter assez sévère, je penses que ça vaut bien un 7/10 pour le code simple d'utilisation, compréhensible ainsi que l'originalité.

Commentaire de Julien39 le 08/02/2012 08:12:16 administrateur CS

Merci, c'est vrai que c'est un peu moins brouillon pour quelques modifs du code seulement

Commentaire de Pylouq le 18/02/2012 16:11:45

Rien qu'à voit tout ça, j'aime ! Y'a plus qu'à faire tourner tout ça :p

Commentaire de Julien39 le 19/02/2012 18:37:50 administrateur CS

Merci pour ton commentaire. Normalement ça tourne bien :)

Commentaire de ikramia le 15/05/2012 22:50:35

est ce que c'est possible de faire des lien quand on appuyant sur une menu ????  

Commentaire de Julien39 le 16/05/2012 07:56:52 administrateur CS

Des lien vers une page web ? Oui, c'est possible

Commentaire de ikramia le 19/05/2012 11:00:16

nn po vers des page web vers d'autre page de java c-a-d chaque menu nous redirige vers une page différente
j'essaie de recuperer le x et le y par la fonction getX() mais ca marche po par ce que tt les menu on le meme x et y :(

Commentaire de Julien39 le 21/05/2012 08:51:42 administrateur CS

Salut,

C'est une très mauvaise méthode, il faut que tu mettes un Listener sur chacun des items du menu :
ElementMenu e1 = new ElementMenu("Menu4", new Color(19, 73, 140), new Color(162, 198, 232), 100);
e1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//Les actions à effectuer
}
});
items.add(e1);

Commentaire de ikramia le 22/05/2012 23:12:11

merci beaucoup mais il y a un prob dans la methode addActionListener elle n'est po reconnu :'(

Commentaire de ikramia le 22/05/2012 23:18:35

meme si j'ajout l'importation !!!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

SWING/font/XML/arbre binaire algo URGENT !!! [ par mkstraits ] salut !à partir d'une interface swing java, on est supposé pouvoir entrer des formules (dans un certain langage de logique) exemple simple: (a.b)=(c+d Swing chemin erroné!!! [ par snake64 ] Bonjour à tous !!Encore une question bidon mais dont je ne trouve pas la réponse!!!J'ai voulu gérer mes boutons de souris et donc j'utilise la classe Interface Swing [ par sikstar ] Yop all !Je débute en java, j'travaille sur des interfaces swing.J'aimerais placer des JButton a ma facon, malheureusement on ne les place pas par coo Swing - GridLayout [ par sikstar ] Voila merci ki lira et répondra à ce post ;)Alors j'ai tenté de définir un layout GridLayout pour placer des boutons, voici le code source en berf :im impression avec swing [ par wilber ] Salut!COmment imprimer un fichier texte avec swing???Jsouhaiterais lance l'impression apres avoir fixe les differents parametres (avec la methode prin Swing / awt [ par leBigouden ] Salut tt le mondej'aimerais savoir qu'elles sont les avantages a utiliser le package Swing plutot que awt (avantage d'une JFrame par rapport a une Fra comment faire pour redimentionner une interface swing pour imprimer [ par zozolh ] comment faire pour redimentionner une interface swing ? quand j'imprime la taille est trop grande et sort de la zone d'impression, et j'ai pas toute m interface graphique avec swing [ par stickasia ] bonjour j'essai de faire déplacer un carre de gauche a droite avec un timer et avec swing pouvez vous maider SVP Comment utiliser swing et awt sous windows [ par rayy ] Ben c simple, j'ai Jcreator, et je voulais savoir comment programmer à l'aide de java swing et de awt sous windows. Comment utiliser swing et awt sous windows [ par rayy ] je me suis trompé de theme, donc pourrai-je savoir comment utiliser java swing et awt sous wiçndows, sachant que j'ai JCreator et le JRESDK installé.


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,591 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales