probleme de bouton personnaliser. [JAVA] - Java - Programmation
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)
Marsh Posté le 12-11-2015 à 21:41:53
personne a une solution ?
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;
}
}
Marsh Posté le 12-11-2015 à 22:23:49
En bidouillant les imports j'obtiens ça :
C'est quoi la question au juste ?
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 ?
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! |
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)
Marsh Posté le 12-11-2015 à 22:34:25
je l'ai copier dans tous les répertoire qui pouvais exister pas mieu
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
Marsh Posté le 12-11-2015 à 22:38:25
non c'est bien java.jpg
Marsh Posté le 12-11-2015 à 22:38:53
tu dit ta bidouiller les import ta modifier quoi dedans
Marsh Posté le 12-11-2015 à 22:44:45
Dans ta classe Bouton, juste après :
Code :
|
copie colle ce code :
Code :
|
execute et copie le résultat de la console
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)
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 :
|
Fichier Fenetre.java
Code :
|
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
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)
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
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