[JAVA]probleme de bouton personnaliser.

probleme de bouton personnaliser. [JAVA] - Java - Programmation

Marsh Posté le 11-11-2015 à 23:34:51    

Bonjour,
 
J’essaie de personnaliser des bouton sous java mais impossible.... ca crée une sorte de miroire de la Jframe dans le bouton !!! (je croie que j'ai développer une nouvelle fonction de JAVA !!!)
 
un exemple de programme réalisé :
j'ai une image : java.jpg
3 classe :
- Fenetre ( dans package flowlayout)
- test (dans package flowlayout_test)
- Bouton  ( dans package flowlayout)
 
Les 3 classes sont composé de la facon suivant :
 
Test :
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package flowlayout_test;
 
 
import flowlayout.Fenetre;
import flowlayout.Panneau;
 
 
 
 
import javax.swing.JFrame;
 
 
/**
 *
 * @author  
 */
 
 
public class Test //crée une classe principal Test pour indiquer ou trouver les objet/methode/classes//
{
    public static void main(String[] args)
    {
        Panneau methode = new Panneau(); //indique ou seront les methodes qui modifiront le Panel//
        Fenetre fenetre = new Fenetre(); //indique comment la fenetre JPane est crée//
       
     
    }
     
 
     
}
 
 
Classe Fenetre :
package flowlayout;
 
 
import flowlayout.Panneau;
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
 
public class Fenetre extends JFrame {
 
    private Panneau pan = new Panneau();
    public JButton bouton = new Bouton("mon bouton" );
    private JPanel container = new JPanel();
 
    public Fenetre() {
        this.setTitle("Animation" );
        this.setSize(300, 300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        container.setBackground(Color.white);
        container.setLayout(new BorderLayout());
        container.add(pan, BorderLayout.CENTER);
        container.add(bouton, BorderLayout.SOUTH);
        this.setContentPane(container);
        this.setVisible(true);
        go();
    }
 
    private void go() {
//Les coordonnées de départ de notre rond
        int x = pan.getPosX(), y = pan.getPosY();
//Le booléen pour savoir si l'on recule ou non sur l'axe x
        boolean backX = false;
//Le booléen pour savoir si l'on recule ou non sur l'axe y
        boolean backY = false;
//Dans cet exemple, j'utilise une boucle while
//Vous verrez qu'elle fonctionne très bien
        while (true) {
//Si la coordonnée x est inférieure à 1, on avance
            if (x < 1) {
                backX = false;
            }
//Si la coordonnée x est supérieure à la taille du Panneau moins la taille du rond, on recule
            if (x > pan.getWidth() - 50) {
                backX = true;
            }
//Idem pour l'axe y
            if (y < 1) {
                backY = false;
            }
            if (y > pan.getHeight() - 50) {
                backY = true;
            }
//Si on avance, on incrémente la coordonnée
            if (!backX) {
                pan.setPosX(++x);
            } //Sinon, on décrémente
            else {
                pan.setPosX(--x);
            }
//Idem pour l'axe Y
            if (!backY) {
                pan.setPosY(++y);
            } else {
                pan.setPosY(--y);
            }
//On redessine notre Panneau
            pan.repaint();
//Comme on dit : la pause s'impose ! Ici, trois millièmes de seconde
            try {
                Thread.sleep(3);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
 
 
Classe Bouton :
package flowlayout;
 
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
public class Bouton extends JButton{
private String name;
private Image img;
public Bouton(String str){
super(str);
this.name = str;
try {
img = ImageIO.read(new File("java.jpg" ));
} catch (IOException e) {
e.printStackTrace();
}
}
public void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D)g;
GradientPaint gp = new GradientPaint(0, 0, Color.blue, 0, 20,
Color.cyan, true);
g2d.setPaint(gp);
g2d.drawImage(img, 0, 0, this.getWidth(), this.getHeight(),
this);
g2d.setColor(Color.black);
g2d.drawString(this.name, this.getWidth() / 2 - (this.getWidth()
/ 2 /4), (this.getHeight() / 2) + 5);
}
}        
 

Question
: comment personnaliser le bouton avec une image ?
 
Merci d'avance


Message édité par saebalyon le 11-11-2015 à 23:36:01

---------------
L'urbex : faire découvrir le patrimoine oublié / Mes albums urbex : https://www.flickr.com/photos/14695 [...] 5272741566 et https://www.flickr.com/photos/20070 [...] 0316987281
Reply

Marsh Posté le 11-11-2015 à 23:34:51   

Reply

Marsh Posté le 11-11-2015 à 23:54:17    

ca me mais en erreure :  
 
run:
javax.imageio.IIOException: Can't read input file!
 at javax.imageio.ImageIO.read(ImageIO.java:1301)
 at flowlayout.Bouton.<init>(Bouton.java:25)
 at flowlayout.Fenetre.<init>(Fenetre.java:14)
 at flowlayout_test.Test.main(Test.java:29)
BUILD SUCCESSFUL (total time: 5 seconds)


---------------
L'urbex : faire découvrir le patrimoine oublié / Mes albums urbex : https://www.flickr.com/photos/14695 [...] 5272741566 et https://www.flickr.com/photos/20070 [...] 0316987281
Reply

Marsh Posté le 12-11-2015 à 21:41:53    

personne a une solution ?


---------------
L'urbex : faire découvrir le patrimoine oublié / Mes albums urbex : https://www.flickr.com/photos/14695 [...] 5272741566 et https://www.flickr.com/photos/20070 [...] 0316987281
Reply

Marsh Posté le 12-11-2015 à 21:48:45    

Commence déjà par nous montrer AUSSI ta classe Panneau

Reply

Marsh Posté le 12-11-2015 à 22:16:04    

tien j'avais pas vue je l'avais oublié , autant pour moi , la voila :  
 
classe panneau  
 
package flowlayout;
 
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
 
public class Panneau extends JPanel {
 
    private int posX = -50;
    private int posY = -50;
 
    public void paintComponent(Graphics g) {
//On choisit une couleur de fond pour le rectangle
        g.setColor(Color.white);
//On le dessine de sorte qu'il occupe toute la surface
        g.fillRect(0, 0, this.getWidth(), this.getHeight());
//On redéfinit une couleur pour le rond
        g.setColor(Color.red);
//On le dessine aux coordonnées souhaitées
        g.fillOval(getPosX(), getPosY(), 50, 50);
    }
 
    public int getPosX() {
        return posX;
    }
 
    public void setPosX(int posX) {
        this.posX = posX;
    }
 
    public int getPosY() {
        return posY;
    }
 
    /**
     * @param posY the posY to set
     */
    public void setPosY(int posY) {
        this.posY = posY;
    }
}


---------------
L'urbex : faire découvrir le patrimoine oublié / Mes albums urbex : https://www.flickr.com/photos/14695 [...] 5272741566 et https://www.flickr.com/photos/20070 [...] 0316987281
Reply

Marsh Posté le 12-11-2015 à 22:23:49    

En bidouillant les imports j'obtiens ça :
http://reho.st/self/80ad2c55d100dc7667f210efe50a592319009ee8.png
 
C'est quoi la question au juste ?


Message édité par caps lock le 12-11-2015 à 22:24:08
Reply

Marsh Posté le 12-11-2015 à 22:25:20    

pour moi le bouton ne prend pas en compte mon image que je veut lui mettre et je ne vois pas ou est l’erreur
 
ta modifier quoi ?


---------------
L'urbex : faire découvrir le patrimoine oublié / Mes albums urbex : https://www.flickr.com/photos/14695 [...] 5272741566 et https://www.flickr.com/photos/20070 [...] 0316987281
Reply

Marsh Posté le 12-11-2015 à 22:29:35    

Premièrement si tu as ce type de message  

javax.imageio.IIOException: Can't read input file!  
 at javax.imageio.ImageIO.read(ImageIO.java:1301)


Ca veut dire que ton image n'a pas été trouvée par ton programme, il faut placer le fichier "java.jpg" à la racine (c'est à dire à côté des répertoires build/dist/src)

Reply

Marsh Posté le 12-11-2015 à 22:34:25    

je l'ai copier dans tous les répertoire qui pouvais exister pas mieu


---------------
L'urbex : faire découvrir le patrimoine oublié / Mes albums urbex : https://www.flickr.com/photos/14695 [...] 5272741566 et https://www.flickr.com/photos/20070 [...] 0316987281
Reply

Marsh Posté le 12-11-2015 à 22:37:32    

Regarde si l'extension de ton image n'est pas cachée ... exemple : java.jpg.jpg  ou bien java.jpg.png

Reply

Marsh Posté le 12-11-2015 à 22:37:32   

Reply

Marsh Posté le 12-11-2015 à 22:38:25    

non c'est bien java.jpg


---------------
L'urbex : faire découvrir le patrimoine oublié / Mes albums urbex : https://www.flickr.com/photos/14695 [...] 5272741566 et https://www.flickr.com/photos/20070 [...] 0316987281
Reply

Marsh Posté le 12-11-2015 à 22:38:53    

tu dit ta bidouiller les import ta modifier quoi dedans


---------------
L'urbex : faire découvrir le patrimoine oublié / Mes albums urbex : https://www.flickr.com/photos/14695 [...] 5272741566 et https://www.flickr.com/photos/20070 [...] 0316987281
Reply

Marsh Posté le 12-11-2015 à 22:44:45    

Dans ta classe Bouton, juste après :

Code :
  1. super(str);


 
copie colle ce code :
 

Code :
  1. File folder = new File(System.getProperty("user.dir" ));
  2.       File[] listOfFiles = folder.listFiles();
  3.       for (int i = 0; i < listOfFiles.length; i++) {
  4.          if (listOfFiles[i].isFile()) {
  5.             System.out.println("File " + listOfFiles[i].getName());
  6.          } else if (listOfFiles[i].isDirectory()) {
  7.             System.out.println("Directory " + listOfFiles[i].getName());
  8.          }
  9.       }


 
execute et copie le résultat de la console

Reply

Marsh Posté le 12-11-2015 à 22:54:36    

le resultat :  
 
run:
File java.jpg
File manifest.mf
File Thumbs.db
File build.xml
Directory test
Directory build
Directory src
Directory nbproject
Directory dist
javax.imageio.IIOException: Can't read input file!
 at javax.imageio.ImageIO.read(ImageIO.java:1301)
 at flowlayout.Bouton.<init>(Bouton.java:36)
 at flowlayout.Fenetre.<init>(Fenetre.java:13)
 at flowlayout_test.Test.main(Test.java:28)


---------------
L'urbex : faire découvrir le patrimoine oublié / Mes albums urbex : https://www.flickr.com/photos/14695 [...] 5272741566 et https://www.flickr.com/photos/20070 [...] 0316987281
Reply

Marsh Posté le 12-11-2015 à 22:54:42    

Et pour les imports, j'ai tout harmonisé sur le même package ...
 
Fichier Test.java

Code :
  1. package test;
  2. import flowlayout.Fenetre;
  3. import flowlayout.Panneau;


 
Fichier Fenetre.java

Code :
  1. package test;
  2. package flowlayout;
  3. import flowlayout.Panneau;


 
 

Reply

Marsh Posté le 12-11-2015 à 23:21:02    

si je vire les import ca marche plus du tous
 
je vois pas d’où sort ce package test


---------------
L'urbex : faire découvrir le patrimoine oublié / Mes albums urbex : https://www.flickr.com/photos/14695 [...] 5272741566 et https://www.flickr.com/photos/20070 [...] 0316987281
Reply

Marsh Posté le 13-11-2015 à 19:18:37    

c'est bon j'ai trouver la solution au lieu d’écrire que java.jpg il fallait j’écrive /src/.... (en gros le lieu exacte de l'image)


---------------
L'urbex : faire découvrir le patrimoine oublié / Mes albums urbex : https://www.flickr.com/photos/14695 [...] 5272741566 et https://www.flickr.com/photos/20070 [...] 0316987281
Reply

Marsh Posté le 14-11-2015 à 18:15:34    

saebalyon a écrit :

je l'ai copier dans tous les répertoire qui pouvais exister pas mieu


heureusement que tu avais dit ça

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed