IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[debutant] cherche qq infos sur le graphique


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Par défaut [debutant] cherche qq infos sur le graphique
    Bonjour a tous,
    Voila,je dessine une grille de 10 colonnes et 10 lignes.
    J'aurais quelques questions:
    1/comment ajouter un boutton dans une case de ma grille?
    2/comment ajouter une image dans une case ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    public class grille extends JPanel{
    	JButton test;
    	public grille(){
    		Graphics g = this.getGraphics();
    		setSize(400,400);
    		setVisible(true);
    		setBackground(Color.yellow);
    		//repaint();
    		System.out.println(getHeight());
    		test =new JButton("inser img");
    		.....
    	}
     
    	public void paintComponent(Graphics g){
    		int i;
    		super.paintComponent(g);
    		g.setColor(Color.red);
    		for(i=0;i<10;i++)
    			{
    			g.drawLine(40*i,0,40*i,400);
    			g.drawLine(0,40*i,400,40*i);
    			}
    		g.setColor(Color.BLUE);
    		g.fillRect(10,10,25,25);
    	}
     
    	public static void main(String[] args){
    		JFrame frame =new JFrame();
    		JPanel pan =new grille();
    		frame.getContentPane().add(pan);
    		frame.setTitle("Micosimulation");
    		frame.setSize(400,400);
    		//frame.setResizable(false);
    		frame.setVisible(true);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    	}
    }

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Pour l'image c'est simple : il suffit de la dessiner aux bonnes coordonees et a la bonne dimension avec g.drawImage(image, x, y, largeurCellule, hauteurCellule, null).

    Pour le bouton... ca va etre un poil different celon que tu veuilles qu'il soit cliquable ou pas. Tu peux tres bien appeler la methode paint() bouton depuis ta methode de dessin... il faudra juste lui donner une bonne taille avant et aussi probablement verifier qu'il a le bon LnF. Evidement comme ca il n'est pas cliquable : il s'agit juste de l'image/du dessin du bouton.

    Sinon tu rajoutes le bonton dans le panel au niveau du constructeur via la methode add() et tu le met au bon endroit avec la methode setLocation() ou setBounds() (pourqu'il ai la bonne taille). Il faut penser a mettre le layout du panel a null avec setLayout(null) avant de l'ajouter.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Par défaut
    merci pour ta reponse,
    Pour le boutton j'ai reussi a le positionner mais je voudrais savoir comment regler les bordures (si c'est possible.

    Pour l'image j'ai trouvé ce code-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Image img= getToolkit().getImage("lignedr.jpg");
    ......
    public void paintComponent(....){
    ........
    g.drawImage(img,0,0,40,40,this);
    }
    Mais voila,ce que j'aimerais obtenir c'est un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Image img = new Module(name_img);
    .......
    g.draw(....,0,0,40,40,this);

    Est-ce possible??

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    La bordure, quelle bordule ? Celle du bouton ? Du panel ?

    Globalement tu as des objets de type Border (voir BorderFactory) que tu peux mettre sur la plupart des JComponent. Et si tu n'es pas sur si ton composant a une bordure ou pas il faut penser a en tenir compte quand tu calcules les dimensions et l'orgine de la surface affichable. La taille de la bordure est recuperable via un objet Insets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    /** @inheritDoc
    */
    @override protected void paintComponent(Graphics g) {
      Insets insets = getInsets();
      Dimension size = getSize();
      int ox = insets.left;
      int oy = insets.top;
      int width = size.width-(insets.left+insets.right);
      int height = size.height-(insets.top+insets.bottom);
     
      ///////////////////////////////////////
      g.translate(ox, oy);
      try {
        // Dessin ici.
        ...
      }
      finally {
        g.translate(-ox, -oy);
      }
     
      // OU :
      ///////////////////////////////////////
      Graphics2D g2d = (Graphics2D)g.create(ox, oy, width, height);
      try { 
        // Dessin ici.
        ...
      }
      finally { 
        g2d.dispose();
      }
    }
    Qu'est ce que Module ?
    Sinon Toolkit charge les images de maniere asynchrone, ainsi elle peut donc ne pas etre completement chargee au moment du premier affichage. ImageIO et ImageIcon chargent les images de maniere synchrone (l'appel est bloquant tant que l'image n'est pas completement chargee).
    Egalement tu peux gagner en vitesse d'affichage en transformant les images chargees en images compatible (chercher "BufferedImage compatible gfx" sur le forum).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Par défaut
    Ok,merci pour ta reponse.
    Mon module en fait serait une nouvelle classe du style class Module1 extends BufferedImage{.....}, cette classe me renverra l'image souhaite.Cette est-elle possible ou non?

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    L'ennui c'est que pour creer une BufferedImage, il te faut connaitre sa taille ou avoir deja acces au Raster (donc avoir charge l'image). Donc ta class Module ne peut pas etendre directement de BufferedImage, juste prendre le nom du fichier et esperer charger les donnees apres coup. Il faut ruser.

    Tu peux par contre faire un truc de ce genre (vite tape et pas teste) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    public class Module extends BufferedImage {
     
      Module(String imageName) throws IOException {
        this(ImageFactory.getImage(imageName));
      }
     
      Module(BufferedImage image) throws NullPointerException {
        super(image.getWidth(), image.getHeight(), image.getType()}
        ImageUtilities.copyImage(image, this);
      }
    }
     
    public final class ImageFactory {
      public static BufferedImage image getImage(String filename) throws IOException {
        URL url = ImageFactory.class.getResource(filename);
        // OU
        //File = new File(filename);
        //URL url = file.toURL();
        // Celon qu'on utilise une ressource de l'application ou un fichier sur le disque dont on connait le nom "en dur".
        BufferedImate result = ImageIO.read(url);
        result = ImageUtilities.toCompatibleImage(result);
        return result;
      }
    }
     
    public final class ImageUtilities {
       public static BufferedImage toCompatibleImage(Image source) {
         BufferedImage result = null;
         if ((source != null) && (source.getWidth(null) != 0) && (source.getHeight(null) !=0) {
           result = (BufferedImage)copyImage(source, null);
         }
         return result;
       } 
     
      public static BufferedImage createCompatibleImage(int width, int height, int transparency) {
        BufferedImage result = null;
        if ((width != 0) && (height !=0) {
          GraphicsConfiguration configuration = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
          result = GraphicsConfiguration.createCompatibleImage(width, height, transparency);
        }
        return result;
      }
     
      public Image copyImage(Image source, Image destination) throws NullPointerException {
        if ((source != null) && (source.getWidth() != 0) && (source.getHeight() !=0) {
          if (destination == null) { 
            destination = makeCompatibleImage(source.getWidth(null), source.getHeight(null), source.getTransparency());       
          }
          Graphics graphics = destination.getGraphics();
          try {
            graphics.drawImage(source, 0, 0, null);
          }
          finally { 
            graphics.dispose();
          }
        }
        return destination;
      }
    }
    Mais a moins que tu ne stockes des choses speciales dedans (comme le nom du fichier source), je ne vois pas trop l'interret d'avoir une classe Module qui etende BufferedImage. Autant utiliser BufferedImage directement.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Je cherche des infos sur 4D
    Par kervin dans le forum 4D
    Réponses: 2
    Dernier message: 10/12/2007, 10h59
  2. [W3C] Cherche une info sur les règles Opéra
    Par Diabless6 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 21/07/2007, 20h03
  3. Cherche des infos sur les techniques de Trigger
    Par walid0577 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 20/04/2007, 17h22
  4. Cherche lien info... sur l'analyse du code
    Par Alec6 dans le forum Qualimétrie
    Réponses: 3
    Dernier message: 03/03/2004, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo